为什么SQL Server'='比较器不区分大小写?

时间:2011-02-08 21:53:50

标签: sql sql-server case-sensitive

我刚刚意识到用于文本比较的SQL server '='比较器不区分大小写。关于此功能,我有几个问题:

  1. 对于所有数据库或特定于SQL Server,这是相同的吗?
  2. 我一直在使用lower函数来确保文本比较直到现在都不敏感。遵循同样的方法仍然是一个好主意吗?
  3. 我们如何在SQL Server中进行区分大小写的比较?
  4. 为什么'='运算符默认为不区分大小写的比较?

5 个答案:

答案 0 :(得分:25)

不,区分大小写与等号无关。

区分大小写由数据库的排序规则确定 - see the documentation for details

答案 1 :(得分:12)

区分大小写仅取决于排序规则。 您可以在每个'='操作

中指定排序规则
SELECT  *
  FROM  [Table_1] a inner join
        [Table_2] b on a.Col1=b.Col2 collate Modern_Spanish_CS_AI

答案 2 :(得分:5)

  

我一直在使用lower函数来确保文本比较直到现在都不敏感。遵循同样的方法仍然是一个好主意吗?

绝对不是。如果这样做,通常会排除使用索引。普通旧=(或<或>或其他)将起作用或不起作用,具体取决于您选择的整理。不要这样做“只是为了安全”。测试将确保你做对了。

答案 3 :(得分:3)

在为数据库设置排序规则时,在安装期间确定SQL Server中的操作的区分大小写。此时,您可以选择将SQL Server安装为不区分大小写(默认)或区分大小写。

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

答案 4 :(得分:1)

如何进行比较取决于您为该字段选择的排序规则。如果您更改字段以使用区分大小写排序,则比较将具有案例意义。

默认情况下,字段使用数据库的排序规则集,但每个字段都可以拥有自己的排序规则设置。