区分大小写很疯狂

时间:2013-09-23 09:40:51

标签: sql-server tsql case-sensitive

我有一个数据库,我正在尝试执行以下查询:

SELECT COUNT(*) FROM [Resource] WHERE Name LIKE 'ChinaApp%'

SELECT COUNT(*) FROM [Resource] WHERE Name LIKE 'Chinaapp%'

这将返回两个不同的计数:

Counts

我想到的第一件事是检查区分大小写。我检查了服务器级别,数据库级别和列级别的排序规则:

服务器级别:Latin1_General_ CI _AS

SELECT SERVERPROPERTY('COLLATION')

Server level

数据库级别:Danish_Norwegian_ CI _AS

SELECT DATABASEPROPERTYEX('Data Warehouse', 'Collation')

Database level

列级:Danish_Norwegian_CI_AS

SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Resource'
AND COLUMN_NAME = 'Name'

Column level

问题:

查询出了什么问题?如前所述,已禁用区分大小写。为什么计数不同?

2 个答案:

答案 0 :(得分:2)

Danish_Norwegian_CI_AS 是个问题!谢谢@realspirituals提示!

在我的默认排序规则中,'aa'实际上是一个单个字符。以下链接的最后一行解释了它。 ÅåAAAaaa都是一样的。

Collation chart for Danish_Norwegian_CI_AS

以下查询现在提供了正确的结果集(计数):

SELECT COUNT(*) FROM [Resource] WHERE Name LIKE 'ChinaApp%'

SELECT COUNT(*) FROM [Resource] WHERE Name LIKE 'Chinaapp%'
COLLATE Latin1_General_CI_AS

答案 1 :(得分:1)

试试这个:

SELECT COUNT ( * ) FROM [RESOURCE] WHERE Name COLLATE SQL_Latin1_General_CI_AS LIKE 'Chinaapp%'