当前位置: 首页 > 面试题库 >

使H2引用的名称和未引用的名称相同

丘畅
2023-03-14
问题内容

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一起使用?


问题答案:

根据SQL规范的要求,H2中的引号名称区分大小写。这意味着它将起作用:

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

但这不会:

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

在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,则取消引号标识符不会转换为大写,这意味着它们也区分大小写。但是在创建数据库时以及每次使用数据库时都需要附加此内容(如果附加现有数据库的设置,则现有对象的标识符已转换为大写)。

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



 类似资料:
  • 问题内容: 我正在为我的Python模块编写文档(使用Sphinx和reST),并且发现当交叉引用其他Python对象(模块,类,函数等)时,完整的对象名最终变得非常长。通常它的长度超过80个字符,我不惜一切代价避免。 这是一个例子: 问题是,在为 ReallyLongExampleClassName 类创建文档时,我为完整路径名生成了它。 我想知道是否有办法解决这个问题?我尝试了以下方法,但没有

  • 我在Python Pandas中使用一个数据框,该数据框的列名前缀为。我可以通过声明来访问给定的列。但是,当我尝试对其执行查询时,例如,它会抛出一个错误,即不是数据框的成员。 如何在名称前加上句点执行查询或其他类似操作? 此外,一些系列名称中也有空格。我假设带句点的列名的解决方案类似于包含空格的名称的解决方案。

  • 问题内容: 计划使用字符串值来引用我要更新的变量。组合来自几个不同用户选择来源的字符串。有很多使用if / case语句的可能性。提前致谢 问题答案: 如何使用字典? 这将使您实现所需的功能-存储不同键的值。 例如,代替使用 你可以用 要将值存储在字典中,只需使用 并从字典中获取值,请使用 所以,你可以使用这样的东西 顺便提一句,您可以真正清理一些代码

  • 本文向大家介绍phpcms的分类名称和类别名称的调用,包括了phpcms的分类名称和类别名称的调用的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 问题内容: 我想做这样的事情: 现在调用类或它的实例: 显然,此确切的代码不起作用,但是是否有类似的方法可以使它起作用?还是任何其他解决方法都可以在没有太多“怪异”内容的情况下获得这种行为? 问题答案: 类和实例方法位于同一个命名空间中,并且您不能像这样重用名称。在这种情况下,最后的定义将获胜。 类方法将继续在实例上运行,但是, 无需 创建单独的实例方法。只需使用: 因为方法继续绑定到该类: 明确

  • 我想问一下java编程语言,具体到构造函数。假设我们有一个类测试,在那里我们测试整个程序,和类点,在那里定义构造函数(集和获取方法btw)。类行: 类点: 现在,如果我在构造函数中输入类点的名称,那将是一个错误: