我刚刚意识到用于文本比较的SQL server '=' 比较器不区分大小写 . 关于此功能,我有几个问题:
'='
对于所有数据库或特定于SQL Server,这是相同的吗?
我一直在使用 lower 函数来确保文本比较直到现在都不敏感 . 遵循同样的方法仍然是一个好主意吗?
lower
如何在SQL Server中进行区分大小写的比较?
为什么 '=' 运算符默认为不区分大小写的比较?
不,区分大小写与等号无关 .
区分大小写由数据库的排序规则确定 - see the documentation for details .
区分大小写仅取决于排序规则 . 您可以在每个 '=' 操作中指定排序规则
SELECT * FROM [Table_1] a inner join [Table_2] b on a.Col1=b.Col2 collate Modern_Spanish_CS_AI
我一直在使用lower函数来确保文本比较直到现在都不敏感 . 遵循同样的方法仍然是一个好主意吗?
绝对不 . 如果这样做,通常会排除使用索引 . 普通旧=(或<或>或其他)将起作用或取决于您选择的整理 . 不要这样做“只是为了安全” . 测试将确保您做对了 .
在为数据库设置排序规则时,在安装期间确定SQL Server中的操作的区分大小写 . 在那个时候,您可以选择安装SQL Server作为不区分大小写(默认)或区分大小写 .
http://msdn.microsoft.com/en-us/library/aa197951(v=sql.80).aspx
如何进行比较取决于您为该字段选择的排序规则 . 如果您更改字段以使用案例感知校对,则比较将具有案例意义 .
默认情况下,字段使用数据库的排序规则集,但每个字段都可以拥有自己的排序规则设置 .
5 回答
不,区分大小写与等号无关 .
区分大小写由数据库的排序规则确定 - see the documentation for details .
区分大小写仅取决于排序规则 . 您可以在每个
'='
操作中指定排序规则绝对不 . 如果这样做,通常会排除使用索引 . 普通旧=(或<或>或其他)将起作用或取决于您选择的整理 . 不要这样做“只是为了安全” . 测试将确保您做对了 .
在为数据库设置排序规则时,在安装期间确定SQL Server中的操作的区分大小写 . 在那个时候,您可以选择安装SQL Server作为不区分大小写(默认)或区分大小写 .
http://msdn.microsoft.com/en-us/library/aa197951(v=sql.80).aspx
如何进行比较取决于您为该字段选择的排序规则 . 如果您更改字段以使用案例感知校对,则比较将具有案例意义 .
默认情况下,字段使用数据库的排序规则集,但每个字段都可以拥有自己的排序规则设置 .