gpt4 book ai didi

sql - Java DB/Derby-表名中的空白-如何转义?

转载 作者:行者123 更新时间:2023-12-02 09:46:51 25 4
gpt4 key购买 nike

Java DB / Derby-表(列)中的空白名称-如何转义?在MySQL数据库中,它仅通过``(重音符)进行转义,但是如果我尝试执行查询(Java DB),例如:

CREATE TABLE `etc etc` (ID INT PRIMARY KEY, Title VARCHAR(12))

我得到错误:

java.sql.SQLSyntaxErrorException: Lexical error at line 1, column 14. Encountered: "`" (96), after : "".



有什么解决办法吗?

编辑:

确实感谢您提供全面的答案。我发现了有趣的东西(Java DB):

可以这样创建表:
CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12))

然后得到结果:
SELECT * FROM "etc etc"

但是,如果我这样创建表格(不带空格和引号):
CREATE TABLE etc_etc (ID INT PRIMARY KEY, Title VARCHAR(12))

然后得到这样的结果(例如,双引号实际上并不需要):
SELECT * FROM "etc_etc"

我得到错误:

java.sql.SQLSyntaxErrorException: Table/View 'etc_etc' does not exist.



因此,我的结论是,如果在创建表时使用了引号(名称是否包含空格并不重要),则稍后在获取结果时也应使用引号。反之亦然(当然,这种情况下也没有空白)。

我同意最好不要使用空格,而应使用 _字符。但是我喜欢在MySQL上使用那些`重音符号...

最佳答案

SQL标准要求双引号引用标识符,这些标识符要么是保留字,要么使用标识符中否则不允许的字符。请注意,MySQL只是通过使用可怕的反引号`来忽略标准,但是它可以(我认为应该如此)配置为也允许标准双引号(就像所有其他DBMS一样)。

因此,您的声明应如下所示:

CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12));

注意,使用“带引号的标识符”(或“定界的标识符”)也会使名称区分大小写。 "etc etc"是与 "Etc Etc"不同的表名。因此,在创建完上述表格之后,您始终必须用小写字母写名称。

最好的办法是完全避免使用引号引起来的标识符。因此,在您的情况下,您可能应该使用下划线在视觉上将两个单词分开,以 etc_etc作为名称。

关于sql - Java DB/Derby-表名中的空白-如何转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com