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一起使用?
答案 0 :(得分:32)
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无关。您的问题是关于标识符,而不是数据。