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/