【发布时间】:2013-08-07 16:55:35
【问题描述】:
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 上的那些重音字符...
【问题讨论】:
-
一般人不会在表名中使用空格,他们更喜欢
_字符...是什么让您决定使用空格? -
您是否尝试过使用
"作为转义字符?CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12)) -
这正是我在回答中所说的:使用带引号的标识符使其区分大小写(根据 SQL 标准的要求)。