2010-01-02 1288 views

回答

107

單引號用於指示SQL中字符串的開頭和結尾。雙引號通常不在SQL中使用,但可以因數據庫而異。

堅持使用單引號。

無論如何,這是主要用途。您可以對列別名使用單引號 - 您希望在應用程序代碼中引用的列名不是列在數據庫中實際調用的名稱。例如:PRODUCT.id將作爲product_id更具可讀性,讓您使用以下之一:

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

無論是工作在甲骨文,SQL服務器,MySQL的......但我知道有些曾經說過TOAD IDE似乎在使用單引號方法時會帶來一些悲傷。

當列別名包含空格字符(如product id)時,您必須使用單引號,但建議不要將列別名設置爲多個單詞。

+22

雙引號通常用於對象名稱(例如列名「First name」)。這是SQL-92標準的一部分。 – LukLed 2010-01-02 18:27:49

+0

@LukLed:你的意思是一列*別名*?如果你這樣說 - 我只見過和/或使用過'AS column_name'表示法,或者在列引用之後的**單引號**中提供別名的地方。如果在列別名中有空格字符(我不推薦),必須將別名括在單引號中。 – 2010-01-02 18:31:40

+17

不,我的意思是列名,但它也涉及別名。由於SQL-92標準,我建議使用雙引號來表示別名和不常用字符的名稱。 'SELECT * FROM USERS'Users''不適用於SQL Server,但是SELECT * FROM USERS「Users」'。 – LukLed 2010-01-02 18:38:18

31

在ANSI SQL中,雙引號引用對象名稱(例如表格),它允許它們包含不允許的字符,或者與保留字(避免這種情況)相同。

單引號是用於字符串。

但是,MySQL忘記了標準(除非其SQL_MODE已更改),並允許它們交換使用字符串。

此外,Sybase和Microsoft也使用方括號來標識引用。

所以它有點特定於供應商。

其它數據庫如Postgres的和IBM實際上堅持ANSI標準:)

+4

MySql使用反引號'進行標識符引用。 (剛剛完成) – dar7yl 2010-02-24 06:09:27

+0

例子:如果你想命名的Postgres列「日期」(這是保留的),你需要將它雙引號。 – fny 2014-08-04 18:23:20

55

單引號分隔字符串常量或日期/時間常數。

雙引號分隔了例如表名或列名。這通常只在您的標識符不符合簡單標識符的規則時才需要。

參見:

可以使MySQL使用符合ANSI標準的雙引號:

SET GLOBAL SQL_MODE=ANSI_QUOTES 

您可以使用Microsoft SQL Server雙引號按照ANSI標準:

SET QUOTED_IDENTIFIER ON 
35
  • [小號]英格爾報價是用於[小號] trings;雙引號是[D]數據庫標識符;
  • `符號是一樣的象徵。你可以使用與ANSI_QUOTES啓用。
+4

爲了澄清,反引號(')可用於界定標識符ANSI_QUOTES是否被啓用,但是如果啓用ANSI_QUOTES,那麼「你不能使用雙引號引用文字字符串,因爲它被解釋爲標識符。」 ([源(https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_ansi_quotes))。 (這一切都假設你正在談論MySQL,請介意。) – Sam 2016-10-26 09:34:46

+0

好評,謝謝! – 2016-11-22 21:23:10

1

我用這個記憶:

  • 單引號的字符串(一件事)
  • 雙引號的表名和列名(兩件事)

這是根據規格不是100%正確,但這個助記符幫助我(人類)。

相關問題