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

标签 sql derby javadb

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/

相关文章:

sql - 在 Oracle 数据库中查找键是否存在的最快方法

sql - 在 IBM DB2 中选择列的子集

java - Apache Derby - java.sql.SQLException : Failed to start database

java - 路径独立的 Derby 网络数据库服务

glassfish - 在 GlassFish 上自动启动 JavaDB (Derby)

java - 警告 : ConnectionID:1 Prelogin error: host 127. 0.0.1 端口 3306 意外响应类型:74

sql - 如何在 MS-SQL 中对同一列的不同值使用计数函数?

sql - SQL的reStructuredText?

Java/SQL 查找重复项

java - 如何从另一台计算机连接到 JavaDB?