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那些“重音符号......”
答案 0 :(得分:2)
SQL标准要求使用双引号来引用标识符,这些标识符是保留字或使用标识符中不允许的字符。请注意,MySQL只是通过使用可怕的反引号来忽略标准` - 但它可以(在我看来应该)配置为也允许标准双引号(像所有其他DBMS一样)。
所以你的陈述应该是这样的:
CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12));
请注意,使用“quoted identifiers”(或“delimited identifiers”)也会使名称为敏感。 "etc etc"
是与"Etc Etc"
不同的表名。因此,在创建上述表格之后,始终必须以小写形式编写名称。
最好的办法是完全避免使用带引号的标识符。因此,在您的情况下,您可能会使用下划线将etc_etc
作为名称,以便在视觉上区分这两个单词。