2012-03-15 193 views
12

我以爲會有另一個關於這個問題,但我無法找到一個。在使用PHP的MySQL中,我通常使用反引號封裝字段名稱以掩蓋任何保留的名稱或字符。但是,我的一位同事指出,這也可以用方括號來實現。排除反引號與SQL服務器不兼容的事實(顯然),有什麼區別?我應該使用哪個?SQL語句中的反引號和方括號之間的區別是什麼?

SELECT `username` FROM `users` 
SELECT [username] FROM [users] 
+1

方括號與MySQL兼容嗎?在SQL Server中,你也可以使用「if QUOTED_IDENTIFIER」開啓,如果在MySQL中有效,你也可以不知道。 – 2012-03-15 12:41:59

+0

你說的沒錯,不是它們不兼容,我認爲它們是! – 2012-03-15 12:46:52

+1

如果你使用括號,關鍵字或特殊字符,也可以使用方括號表示使用保留字作爲字段名稱的方式(例如[日期]) – 2012-03-15 12:46:27

回答

18

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

據我所知,可以用turn up in documentation或者在測試中使用,方括號是而不是對MySQL有效。因此,如果您需要在SQL Server中將關鍵字作爲表名稱,請使用[],而在MySQL中使用反引號或在啓用ANSI_QUOTES時使用雙引號。

From the documentation:

標識符引號字符是倒引號(「`」):如果啓用了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) 
+2

+1 - '[]'對於T-SQL來說非常獨特,我不確定任何其他類型的SQL都可以接受它們。 – MatBailie 2012-03-15 12:42:22

+0

這非常有趣,我們都相信方括號可以在任何地方使用,我們剛剛使用MySQL進行了測試,您是對的!:-) – 2012-03-15 12:44:23

+2

SQL Server中的方括號也用於Microsoft Access,其中列名和表名中的嵌入空格很常見。你需要一些很容易輸入的東西。試圖找出如何鍵入反引號可能是謀殺。 – 2012-03-15 12:50:14

5

這兩種都是引用對象名稱的非標準方法,它們應該區分大小寫,是保留字還是包含不允許的特殊字符。

這種標識符的標準引用字符是雙引號。要與ANSI SQL兼容,您應該使用它們:

SELECT "username" FROM "users" 

但請注意,帶引號的標識符按照ANSI SQL區分大小寫。然而這兩個提到的產品都不符合這個要求。這種標識符是否區分大小寫取決於MySQL中的幾個(不同的)配置設置以及MS SQL Server中的數據庫歸類。

兩個DBMS都可以(並且在我看來應該)配置爲接受ANSI標準引用字符。

我強烈建議避免使用要求引用的任何對象名稱。使用不需要引用的標識符將爲您節省很多麻煩。

+0

我完全避免包含保留名稱或特殊字符的任何字段或表名,但是,因爲我正在編寫一個可以使用的MsSQL類由於經驗不足的人,我必須照顧他們,因此,我需要用方括號將每個字段和表格包裝起來以防止出錯,因爲它沒有使用更多的資源(如果有的話),我可能會它 – 2012-03-15 13:08:37

相關問題