我正在利用内存中的 H2 数据库对遗留系统进行自动化测试。
jdbc:h2:mem:testdb;MODE=Oracle
CREATE TABLE MYTABLE (MYCOLUMN CHAR(1));
INSERT INTO MYTABLE VALUES(' ');
SELECT '*' || MYCOLUMN || '*' FROM MYTABLE;
此语句在 Oracle 数据库上返回
* *
,但在 H2 数据库上返回 **
。
这会导致测试时出现错误。
如何禁用字符列的修剪?
我无法更改旧代码。 我无法更改遗留语句。 我无法更改旧的列类型。
自动创建测试表;我可以改变那一边的行为。
您可以尝试将 char 更改为 varchar(1) ,如下所示
CREATE TABLE MYTABLE (MYCOLUMN VARCHAR(1));
因为 char 类型在检索时会填充空格并修剪。
您使用的是完全过时的 H2 版本,所有现代版本都不会删除
CHARACTER
(CHAR
) 值的尾随空格。您需要将您的H2版本升级到2.*.*.