SQL语句中的反引号和方括号有什么区别?

时间:2012-03-15 12:39:07

标签: mysql sql sql-server-2008

我以为会有另外一个问题,但我无法找到。在使用PHP的MySQL中,我通常使用反引号封装我的字段名称以掩盖任何保留的名称或字符。但是,我的一位同事指出,这也可以使用方括号来实现。排除反引号与SQL服务器不兼容的事实(显然),有什么区别?我应该使用哪种?

SELECT `username` FROM `users`
SELECT [username] FROM [users]

2 个答案:

答案 0 :(得分:23)

SQL Server / T-SQL使用方括号(以及MS Access),而MySQL使用反引号。

据我所知,可以turn up in documentation,或者在测试中使用,方括号对MySQL有效。因此,如果需要在SQL Server中将关键字作为表名包含在内,请使用[],并在MySQL中使用反引号,或在启用ANSI_QUOTES时使用双引号。

From the documentation:

  

标识符引号字符是反引号(“`”):

mysql> SELECT * FROM `select` WHERE `select`.id > 100;
  

如果启用了ANSI_QUOTES SQL模式,也允许在双引号内引用标识符:

mysql> CREATE TABLE "test" (col INT);
ERROR 1064: You have an error in your SQL syntax...
mysql> SET sql_mode='ANSI_QUOTES';
mysql> CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)

答案 1 :(得分:5)

两者都是引用对象名称的非标准方法,这些对象名称应区分大小写,是保留字或包含不允许的特殊字符。

此类标识符的标准引号字符是双引号。要与ANSI SQL兼容,您应该使用它们:

SELECT "username" FROM "users"

但请注意,引用的标识符符合ANSI SQL的区分大小写。但是,这两个提到的产品都不符合这一要求。此类标识符是否区分大小写取决于MySQL中的多个(不同)配置设置和MS SQL Server中的数据库排序规则。

DBMS可以(并且在我看来应该)配置为接受ANSI标准引号字符。

我强烈建议避免需要引用的任何对象名称。使用不需要引用的标识符可以为您节省很多麻烦。