内存中的 H2 会修剪尾随空白

问题描述 投票:0回答:2

我正在利用内存中的 H2 数据库对遗留系统进行自动化测试。

jdbc:h2:mem:testdb;MODE=Oracle

CREATE TABLE MYTABLE (MYCOLUMN CHAR(1));
INSERT INTO MYTABLE VALUES(' ');
SELECT '*' || MYCOLUMN || '*' FROM MYTABLE;

此语句在 Oracle 数据库上返回

* *
,但在 H2 数据库上返回
**

这会导致测试时出现错误。

如何禁用字符列的修剪?

我无法更改旧代码。 我无法更改遗留语句。 我无法更改旧的列类型。

自动创建测试表;我可以改变那一边的行为。

java jdbc h2
2个回答
0
投票

您可以尝试将 char 更改为 varchar(1) ,如下所示

CREATE TABLE MYTABLE (MYCOLUMN VARCHAR(1));

因为 char 类型在检索时会填充空格并修剪。


0
投票

您使用的是完全过时的 H2 版本,所有现代版本都不会删除

CHARACTER
(
CHAR
) 值的尾随空格。您需要将您的H2版本升级到2.*.*.

© www.soinside.com 2019 - 2024. All rights reserved.