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/