2011-02-08 68 views
19

我剛剛意識到SQL server '='用於文本比較時不區分大小寫。我有幾個關於此功能的問題:爲什麼SQL Server'='比較器不區分大小寫?

  1. 這對於所有數據庫或特定於SQL服務器都是如此嗎?
  2. 我一直在使用lower函數來確保文本比較到目前爲止不敏感。遵循同樣的想法還是個好主意嗎?
  3. 我們如何在SQL Server中進行區分大小寫的比較?
  4. 爲什麼'='運算符默認不區分大小寫比較?
+0

我敢肯定,對於任何使用大小寫不敏感的排序規則的數據庫來說都是一樣的。它幾乎不是完全平臺無關的(MySQL,SQL Server,PostgreSQL等)。 – BoltClock

+7

它可以完全** ** BE **區分大小寫 - 它取決於**排序規則**您的SQL Server數據庫使用! –

+4

@marc_s:太瘋狂了,它可能只是工作:) –

回答

24

不,區分大小寫與等號無關。

區分大小寫由數據庫的歸類確定 - see the documentation for details

+0

不要碰巧有關於SQL-92標準或關於區分大小寫和整理的說法嗎? – 2011-02-08 22:19:26

+0

@pst:我知道的關於ANSI和整理的唯一的東西是處理填充和尾隨空格,對不起。 –

+0

在Microsoft SQL Server中,大小寫敏感性由有關列的排序規則確定,而不是由數據庫本身的排序規則確定。 – sqlvogel

3

當您爲數據庫設置排序規則時,安裝期間會確定SQL Server中操作的區分大小寫。在那個時候,您可以選擇安裝SQL Server作爲不區分大小寫(默認)或區分大小寫。

http://msdn.microsoft.com/en-us/library/aa197951(v=sql.80).aspx

+0

在Microsoft SQL Server中,大小寫敏感性由相關列的排序規則確定,而不是由數據庫本身的排序規則確定。 – sqlvogel

1

比較是如何做取決於您選擇字段的排序規則。如果將字段更改爲使用大小寫敏感的歸類,則比較將具有大小寫敏感性。

默認情況下,字段使用數據庫的排序規則集,但每個字段都可以具有自己的排序規則設置。

11

大小寫敏感性僅取決於排序規則。 您可以在每個'='操作中指定歸類

SELECT * 
    FROM [Table_1] a inner join 
     [Table_2] b on a.Col1=b.Col2 collate Modern_Spanish_CS_AI 
3

我一直在用較低的功能,保證了文本比較不敏感至今。遵循同樣的想法還是個好主意嗎?

絕對不是。如果你這樣做,你通常會阻止使用索引。 Plain old =(或<或>或其他)將取決於您選擇的整理。不要這樣做「只是爲了安全」。測試將確保您的答案正確。