我以为会有另外一个问题,但我无法找到。在使用PHP的MySQL中,我通常使用反引号封装我的字段名称以掩盖任何保留的名称或字符。但是,我的一位同事指出,这也可以使用方括号来实现。排除反引号与SQL服务器不兼容的事实(显然),有什么区别?我应该使用哪种?
SELECT `username` FROM `users`
SELECT [username] FROM [users]
答案 0 :(得分:23)
SQL Server / T-SQL使用方括号(以及MS Access),而MySQL使用反引号。
据我所知,可以turn up in documentation,或者在测试中使用,方括号不对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)
答案 1 :(得分:5)
两者都是引用对象名称的非标准方法,这些对象名称应区分大小写,是保留字或包含不允许的特殊字符。
此类标识符的标准引号字符是双引号。要与ANSI SQL兼容,您应该使用它们:
SELECT "username" FROM "users"
但请注意,引用的标识符符合ANSI SQL的区分大小写。但是,这两个提到的产品都不符合这一要求。此类标识符是否区分大小写取决于MySQL中的多个(不同)配置设置和MS SQL Server中的数据库排序规则。
DBMS可以(并且在我看来应该)配置为接受ANSI标准引号字符。
我强烈建议避免需要引用的任何对象名称。使用不需要引用的标识符可以为您节省很多麻烦。