我正在开发一种工具,可以将数据导入动态生成的模式。因此,我几乎无法控制表或列的名称。我最近在表中创建2个名称相同但大小写不同的列时遇到了一个问题。此问题可以在最简单的DDL操作中得到证明:
CREATE TABLE "a" ( "c1" integer, "C1" integer )
在我的程序和h2控制台中,这对我来说失败了:
列名“ C1”重复;SQL语句:创建表“ a”(“ c1”整数,“ C1”整数)
例如,在PostgreSQL中这可以正常工作,我认为它应该可以工作,因为在值被双引号时,SQL规范要求区分大小写。
我目前正在使用内存h2数据库。
编辑: 它用尽了原因是使用选项建立了连接,DATABASE_TO_UPPER=false从而导致了此行为
DATABASE_TO_UPPER=false
在H2中,名称不区分大小写。
H2文件
…但…
带引号的名称区分大小写,并且可以包含空格。
引用名称的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建立连接,这会导致此行为