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

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

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

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

据我所知,可以在文档中出现 ,或者在testing中使用,方括号对MySQL无效。 因此,如果您需要在SQL Server中将关键字作为表名称,请使用[] ,在MySQL中使用反引号,或者在启用ANSI_QUOTES时使用双引号。

从文档:

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

 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) 

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

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

 SELECT "username" FROM "users" 

但请注意,带引号的标识符是按照ANSI SQL区分大小写的。 但是这两种产品都不符合这个要求。 这种标识符是否区分大小写取决于MySQL中的几个(不同的)configuration设置以及MS SQL Server中的数据库归类。

两个DBMS都可以(并且在我看来应该)被configuration为接受ANSI标准引用字符。

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