双引号时,H2表列不符合大小写

时间:2016-07-13 12:24:40

标签: sql h2

我正在开发一种工具,可以将数据导入到动态生成的架构中。因此,我无法控制表名或列名的外观。我最近遇到了一个问题,即在表中创建了两个具有相同名称但不同大小写的列。这个问题可以通过这个最简单的DDL操作来证明:

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

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

  

重复列名“C1”; SQL语句:创建表“a”(“c1”   整数,“C1”整数)

这在PostgreSQL中工作得很好,我认为它应该可行,因为当双引号时,SQL规范要求区分大小写。

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

编辑:它用尽了与选项DATABASE_TO_UPPER=false建立连接导致此行为的原因

1 个答案:

答案 0 :(得分:1)

在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建立的,这导致了此行为