我刚刚意识到用于文本比较的SQL server '='
比较器不区分大小写。关于此功能,我有几个问题:
lower
函数来确保文本比较直到现在都不敏感。遵循同样的方法仍然是一个好主意吗?'='
运算符默认为不区分大小写的比较?答案 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)
如何进行比较取决于您为该字段选择的排序规则。如果您更改字段以使用区分大小写排序,则比较将具有案例意义。
默认情况下,字段使用数据库的排序规则集,但每个字段都可以拥有自己的排序规则设置。