1

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

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

我得到错误:

java.sql.SQLSyntaxErrorException:第 1 行第 14 列的词法错误。遇到:“`”(96),在:“”之后。

有什么解决办法吗?

编辑:

确实感谢您提供全面的答案。我发现了有趣的事情(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:表/视图“etc_etc”不存在。

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

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

4

1 回答 1

2

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

所以你的陈述应该是这样的:

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

请注意,使用“带引号的标识符”(或“分隔标识符”)也会使名称区分大小写"etc etc"是与 不同的表名"Etc Etc"。所以在创建了上面的表格之后,你总是必须用小写字母写名字。

最好的办法是完全避免引用标识符。因此,在您的情况下,您可能应该选择etc_etc使用下划线在视觉上分隔两个单词的名称。

于 2013-08-07T17:35:13.647 回答