我以为会有另一个关于这个问题,但我无法找到一个。在使用PHP的MySQL中,我通常使用反引号封装字段名称以掩盖任何保留的名称或字符。但是,我的一位同事指出,这也可以用方括号来实现。排除反引号与SQL服务器不兼容的事实(显然),有什么区别?我应该使用哪个?SQL语句中的反引号和方括号之间的区别是什么?
SELECT `username` FROM `users`
SELECT [username] FROM [users]
我以为会有另一个关于这个问题,但我无法找到一个。在使用PHP的MySQL中,我通常使用反引号封装字段名称以掩盖任何保留的名称或字符。但是,我的一位同事指出,这也可以用方括号来实现。排除反引号与SQL服务器不兼容的事实(显然),有什么区别?我应该使用哪个?SQL语句中的反引号和方括号之间的区别是什么?
SELECT `username` FROM `users`
SELECT [username] FROM [users]
SQL Server/T-SQL使用方括号(以及MS Access),而MySQL使用反引号。
据我所知,可以用turn up in documentation或者在测试中使用,方括号是而不是对MySQL有效。因此,如果您需要在SQL Server中将关键字作为表名称,请使用[]
,而在MySQL中使用反引号或在启用ANSI_QUOTES
时使用双引号。
标识符引号字符是倒引号(“`”):如果启用了ANSI_QUOTES SQL模式
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
,它也允许引用标识符在双引号内:
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 - '[]'对于T-SQL来说非常独特,我不确定任何其他类型的SQL都可以接受它们。 – MatBailie 2012-03-15 12:42:22
这非常有趣,我们都相信方括号可以在任何地方使用,我们刚刚使用MySQL进行了测试,您是对的!:-) – 2012-03-15 12:44:23
SQL Server中的方括号也用于Microsoft Access,其中列名和表名中的嵌入空格很常见。你需要一些很容易输入的东西。试图找出如何键入反引号可能是谋杀。 – 2012-03-15 12:50:14
这两种都是引用对象名称的非标准方法,它们应该区分大小写,是保留字还是包含不允许的特殊字符。
这种标识符的标准引用字符是双引号。要与ANSI SQL兼容,您应该使用它们:
SELECT "username" FROM "users"
但请注意,带引号的标识符按照ANSI SQL区分大小写。然而这两个提到的产品都不符合这个要求。这种标识符是否区分大小写取决于MySQL中的几个(不同的)配置设置以及MS SQL Server中的数据库归类。
两个DBMS都可以(并且在我看来应该)配置为接受ANSI标准引用字符。
我强烈建议避免使用要求引用的任何对象名称。使用不需要引用的标识符将为您节省很多麻烦。
我完全避免包含保留名称或特殊字符的任何字段或表名,但是,因为我正在编写一个可以使用的MsSQL类由于经验不足的人,我必须照顾他们,因此,我需要用方括号将每个字段和表格包装起来以防止出错,因为它没有使用更多的资源(如果有的话),我可能会它 – 2012-03-15 13:08:37
方括号与MySQL兼容吗?在SQL Server中,你也可以使用“if QUOTED_IDENTIFIER”开启,如果在MySQL中有效,你也可以不知道。 – 2012-03-15 12:41:59
你说的没错,不是它们不兼容,我认为它们是! – 2012-03-15 12:46:52
如果你使用括号,关键字或特殊字符,也可以使用方括号表示使用保留字作为字段名称的方式(例如[日期]) – 2012-03-15 12:46:27