一尘不染

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

sql

我正在开发一种工具,可以将数据导入动态生成的模式。因此,我几乎无法控制表或列的名称。我最近在表中创建2个名称相同但大小写不同的列时遇到了一个问题。此问题可以在最简单的DDL操作中得到证明:

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

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

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

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

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

编辑: 它用尽了原因是使用选项建立了连接,DATABASE_TO_UPPER=false从而导致了此行为


阅读 252

收藏
2021-03-08

共1个答案

一尘不染

在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建立连接,这会导致此行为

2021-03-08