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有一个兼容性特性:如果在数据库URL后附加;DATABASE_TO_UPPER=FALSE,则不会将无引号标识符转换为大写,这意味着它们也区分大小写.但是您需要在创建数据库时附加此设置,并且每次使用它时(如果您附加现有数据库的设置,则现有对象的标识符已经转换为大写).

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

Database相关问答推荐

Golang Gorm和Gin无法创建具有关联的对象

在 SQL Server 中找出调用存储过程

如何使用错误消息中指定的 tbspaceid tableid 在 DB2 中查找表和列

哪个本地数据库适合 Windows 8 应用store 应用?

Laravel 5 从 URL 获取 ID

如何在 VS 2012 的 SQL Server 数据库项目中存储静态数据

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

向表中添加大量索引是否有缺点?

为什么 MySQL 连接被许多连接错误阻止?

customer客户表的数据库 struct ,每个客户有很多订单,每个订单有很多商品

如何在 Rails 中不启动事务的情况下运行迁移?

谁有维基数据库?

MongoDB中的数据库数据大小

MySQL中的eq_ref和ref类型是什么意思解释

可以将 SQLAlchemy 配置为非阻塞吗?

如何使用 group_concat 引用值

每个开发人员一个数据库?

xampp phpmyadmin,格式参数不正确

Oracle order NULL LAST 默认

从 SQLAlchemy 中的文件执行 SQL