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

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

データベース レベル

列レベル: Danish_Norwegian_CI_AS

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

列レベル

質問 :

クエリの何が問題になっていますか? 以前に証明されたように、大文字と小文字の区別は無効になっています。カウントが異なるのはなぜですか?

4

2 に答える 2

2

Danish_Norwegian_CI_ASが問題です! ヒントをくれた@realspiritualsに感謝します!

私が持っているこのデフォルトの照合では、「aa」は実際には 1 文字です。次のリンクの最後の行で説明しています。ÅåAAAaおよびaaはすべて同じです。

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
于 2013-09-23T11:49:04.757 に答える