sql - 使 H2 将引用名称和未引用名称视为相同

标签 sql database h2 double-quotes

H2 似乎区分带引号的名称和不带引号的名称。有没有办法让它以同样的方式对待它们?

这是我做过的测试:

CREATE TABLE test (dummy INT);
CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT);

这里是查询:

SELECT * FROM test; --work
SELECT * FROM "test"; -- doesn't work
SELECT * FROM "testquote"; --work
SELECT * FROM testquote; --doesn't work
SELECT dummy FROM "testquote"; --work
SELECT quotedDummy FROM "testquote"; --doesn't work
SELECT "quotedDummy" FROM "testquote"; --work

我该怎么做才能使这些查询与 H2 一起工作?

最佳答案

Quotes names in H2 are case sensitive ,按照 SQL 规范的要求。这意味着这将起作用:

CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT); 
SELECT * FROM "testquote";

但这不会:

SELECT * FROM "TestQuote";
SELECT * FROM "TESTQuote";
SELECT * FROM "TESTQUOTE";

Unquotes names are not case sensitive in H2 .它们通常被转换为大写(如在 Oracle 和其他数据库中)。这意味着声明

CREATE TABLE test (dummy INT);
SELECT * FROM test;

相同
CREATE TABLE "TEST" ("DUMMY" INT);
SELECT * FROM "TEST";

因为 H2 的行为方式与 Oracle 相同。这与 MySQL 和 PostgreSQL 等其他数据库处理标识符名称的方式略有不同。 H2 具有兼容性功能:如果附加 ;DATABASE_TO_UPPER=FALSE对于数据库 URL,不带引号的标识符不会转换为大写,这意味着它们也区分大小写。但是你需要在创建数据库的时候追加这个,每次使用的时候都需要追加这个(如果你追加的是已有数据库的设置,那么已有对象的标识符已经转换为大写了)。

顺便说一句,这与function UPPER无关, 用于数据。您的问题是关于标识符,而不是数据。

关于sql - 使 H2 将引用名称和未引用名称视为相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10789994/

相关文章:

sql - MS SQL - 仅选择一行作为 ID

sql - 如何在记录中的子字符串上连接表?

php - 在 plesk api 中,如果我不知道数据库 ID,如何将用户添加到数据库

java - 为什么 IntelliJ 找不到正确的 WebServlet 类?

java - 如何将H2数据库嵌入到传递给客户端的jar文件中?

sql - 无法使用 ADSI 从 SQL 查询描述

c# - 有没有办法按照以下格式拆分列表 : 'string1' , 'string2' , 'string3' ,

java.sql.SQLException : Parameter number 2 is not an OUT parameter

MySQL基于最近10个日期的嵌套查询

h2 - 如何获取H2数据库中特定列的数据类型