大小写敏感性出现问题

5

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

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

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

这里返回了2个不同的计数:

计数

我首先想到的是检查大小写敏感性。我在服务器级别、数据库级别和列级别上检查了排序规则:

服务器级别:Latin1_General_CI_AS

SELECT SERVERPROPERTY('COLLATION')

服务器级别

数据库级别:Danish_Norwegian_CI_AS

(注:此处的“CI”代表大小写不敏感)
SELECT DATABASEPROPERTYEX('Data Warehouse', 'Collation')

Database level

Column level : Danish_Norwegian_CI_AS

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

列级别

问题:

这个查询有什么问题?大小写敏感性已被禁用,为何计数不同?

2个回答

2
Danish_Norwegian_CI_AS是个问题!感谢@realspirituals的提示!
在这种默认排序中,'aa'实际上是一个字符。以下链接的最后一行解释了这一点。ÅåAAAaaa都是相同的。 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
但是 aA 不是。我们曾经遇到一个问题,当插入数据时没有将其转换为小写,导致在数据库中 bAarbaAr 不同,但在代码中相同,尽管排序规则不区分大小写。 - Siewers
我可以想象调试花费了多少时间 :) - Moslem Ben Dhaou

1

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接