Dra*_*kar 19 sql database h2 double-quotes
H2似乎在引用名称和没有引用的名称之间产生差异.有没有办法让它以同样的方式对待它们?
这是我做过的测试:
CREATE TABLE test (dummy INT);
CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT);
Run Code Online (Sandbox Code Playgroud)
以下是查询:
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
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来使这些查询与H2一起使用?
Tho*_*ler 33
根据SQL规范的要求,H2中的引号名称区分大小写.这意味着这将有效:
CREATE TABLE "testquote" (dummy INT, "quotedDummy" INT);
SELECT * FROM "testquote";
Run Code Online (Sandbox Code Playgroud)
但这不会:
SELECT * FROM "TestQuote";
SELECT * FROM "TESTQuote";
SELECT * FROM "TESTQUOTE";
Run Code Online (Sandbox Code Playgroud)
取消引用名称在H2中不区分大小写.它们通常转换为大写(如在Oracle和其他数据库中).这意味着陈述
CREATE TABLE test (dummy INT);
SELECT * FROM test;
Run Code Online (Sandbox Code Playgroud)
是一样的
CREATE TABLE "TEST" ("DUMMY" INT);
SELECT * FROM "TEST";
Run Code Online (Sandbox Code Playgroud)
因为H2的行为方式与Oracle相同.这与MySQL和PostgreSQL等其他数据库如何处理标识符名称略有不同.H2具有兼容性功能:如果附加;DATABASE_TO_UPPER=FALSE到数据库URL,则取消引用标识符不会转换为大写,这意味着它们也区分大小写.但是在创建数据库时需要附加它,并且每次使用它时(如果附加现有数据库的设置,现有对象的标识符已经转换为大写).
顺便说一句,这与UPPER功能无关,UPPER是用于数据的.您的问题是关于标识符,而不是数据.
| 归档时间: |
|
| 查看次数: |
9086 次 |
| 最近记录: |