H2 table 列在双引号中不区分大小写

H2 table columns doesn't respect case when double-quoted

我正在开发一种工具,可以将数据导入到即时生成的模式中。因此,我几乎无法控制 table 或列名的外观。我最近 运行 遇到了在 table 中创建 2 列的问题,它们具有相同的名称但大小写不同。这个问题可以用这个最简单的 DDL 操作来证明:

CREATE TABLE "a" (
    "c1" integer,
    "C1" integer
)

这对我来说在程序和 h2 控制台中都失败了:

Duplicate column name "C1"; SQL statement: create table "a" ( "c1" integer, "C1" integer )

例如,这在 PostgreSQL 中工作正常,我认为它应该工作,因为 SQL 规范要求在值用双引号引起来时区分大小写。

我目前正在使用内存中的 h2 数据库。

编辑: 运行原因是连接是使用选项 DATABASE_TO_UPPER=false 建立的,这导致了此行为

在 H2 中,名称不区分大小写。

H2 docs

...但是...

引用的名称区分大小写,并且可以包含空格。

H2 docs of Quoted Names

我只是在 H2 的本地实例中 运行 这个确切的例子,它运行良好。

create table p ("c1" integer, "C1" integer);
insert into p values (1,2);
select * from p;

我认为您的 SQL 在 H2 中 运行 之前被更改。在 SQL 为 运行.

之前,所有内容都可能被大写

根据您的更新,连接是使用 DATABASE_TO_UPPER=false 选项建立的,这导致了此行为