如果使用默认排序规则选项安装了SQL Server,则可能会发现以下查询返回相同的结果:CREATE TABLE mytable ( mycolumn VARCHAR(10) ) GO SET NOCOUNT ON INSERT mytable VALUES('Case') GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case' 您可以通过在列级别强制排序规则来更改查询:SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'case' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case' -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case' SELECT DATABASEPROPERTYEX('<database name>', 'Collation') 由于更改此设置会影响应用程序和SQL查询,因此我将首先隔离此测试。从SQL Server 2000,您可以轻松地运行ALTER TABLE语句来更改特定列的排序顺序,从而使其必须区分大小写。首先,执行以下查询以确定将其更改回的内容:EXEC sp_help 'mytable' 在默认情况下,第二个记录集应包含以下信息:Column_Name排序规则mycolumn SQL_Latin1_General_CP1_CI_AS无论“归类”列返回什么,现在您都知道在进行以下更改后需要将其更改回什么,这将强制区分大小写:ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE Latin1_General_CS_AS GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case' 如果这使事情变糟,则只需发出新的ALTER TABLE语句即可将其改回(确保将我的COLLATE标识符替换为之前找到的标识符):ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE SQL_Latin1_General_CP1_CI_AS 如果您对SQL Server 7.0感到困惑,则可以尝试以下解决方法,这可能会对性能造成一些影响(您应该只为FIRST匹配项获得结果):SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10)) -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case'
SQL服务器确定由大小写COLLATION。COLLATION 可以在不同的级别设置。服务器级数据库级列级表达水平这里是MSDN参考。可以COLLATION按Raj More's答案中提到的在每个级别检查。检查服务器排序规则SELECT SERVERPROPERTY('COLLATION')检查数据库整理SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;检查列排序规则select table_name, column_name, collation_namefrom INFORMATION_SCHEMA.COLUMNSwhere table_name = @table_name检查表达式排序规则对于表达式级别,COLLATION您需要查看表达式。:)如下面的示例所示,它通常位于表达式的末尾。SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;归类说明为了获得每个COLLATION值的描述,请尝试此。SELECT * FROM fn_helpcollations()而且您应该看到类似这样的内容。您总是可以放一个WHERE子句进行过滤,并且只为您查看描述COLLATION。您可以在此处找到归类列表。