我正在开发一种工具,可以将数据导入到动态生成的架构中。因此,我无法控制表名或列名的外观。我最近遇到了一个问题,即在表中创建了两个具有相同名称但不同大小写的列。这个问题可以通过这个最简单的DDL操作来证明:
CREATE TABLE "a" (
"c1" integer,
"C1" integer
)
在程序和h2控制台中,这对我失败了:
重复列名“C1”; SQL语句:创建表“a”(“c1” 整数,“C1”整数)
这在PostgreSQL中工作得很好,我认为它应该可行,因为当双引号时,SQL规范要求区分大小写。
我目前正在使用内存中的h2数据库。
编辑:它用尽了与选项DATABASE_TO_UPPER=false
建立连接导致此行为的原因
答案 0 :(得分:1)
在H2中名称不区分大小写。
...但是...
引用的名称区分大小写,并且可以包含空格。
我刚刚在H2的本地实例中运行了这个确切的示例,它工作正常。
create table p ("c1" integer, "C1" integer);
insert into p values (1,2);
select * from p;
我认为您的SQL在H2中运行之前正在被更改。在SQL运行之前,所有东西都可能被大写。
根据您的更新,连接是使用选项DATABASE_TO_UPPER = false建立的,这导致了此行为