不同的数据库使用不同的名称引用符号吗?

24
例如,MySQL 使用反引号引用表名。
SELECT * FROM `table_name`;

注意 ` 的使用。

其他数据库是否有使用不同字符引用表名的情况?

3个回答

38

引号的使用被称为定界符标识符,这是SQL的重要组成部分,否则您将无法使用标识符(例如表名和列名),这些标识符包括:

  • 包含空格: "my table"
  • 包含特殊字符和标点符号:"my-table"
  • 包含国际字符:"私のテーブル"
  • 区分大小写:"MyTable"
  • 与SQL关键字匹配:"table"

标准SQL语言使用双引号作为定界符标识符:

SELECT * FROM "my table";

MySQL默认使用反引号,但也可以使用标准的双引号:

SELECT * FROM `my table`;
SET SQL_MODE=ANSI_QUOTES;
SELECT * FROM "my table";

Microsoft SQL Server和Sybase默认使用方括号。它们都可以使用标准双引号进行如下操作:

SELECT * FROM [my table];
SET QUOTED_IDENTIFIER ON;
SELECT * FROM "my table";

为了支持被限定的标识符,InterBase 和 Firebird 需要将 SQL 方言设置为 3。

大多数其他品牌的数据库正确地使用双引号。


我正在尝试根据Markdown语法格式化反引号,但似乎做不对。 - Bill Karwin
1
在代码块中使用反引号:在块的开头和结尾放置双反引号``,在您的代码块中放置单反引号`。 - Daan
在我的SQL Server中,[ ]" "都可以使用。这也是预期的吗? - fedorqui
2
@fedorqui,我认为你或其他人配置了 QUOTED_IDENTIFIER=ON,否则SQL Server现在默认开启了它。 - Bill Karwin
是的!后来我发现了这个……还有,你甚至可以将表命名为Table],然后使用...FROM [Table]]]...进行查询。非常奇怪的事情。再次感谢您的启示,比尔! - fedorqui
显示剩余2条评论

2

当QUOTED_IDENTIFIER选项为ON时,SQL Server使用[方括号]或“双引号”。

我相信双引号是SQL-92标准中的。


2

简而言之,是的。

SQL标准使用双引号来表示“限定符标识符”的名称。

默认情况下,Informix使用单引号和双引号可互换地表示字符串。但是,通过设置环境变量DELIMIDENT,您可以打开SQL标准行为-在字符串周围使用单引号,在限定符标识符周围使用双引号。

其他人列出了其他DBMS的其他行为; 我不需要重复这些内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接