SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server の照合順序のバージョンによる濁点/半濁点の類似性の違いについて

leave a comment

詳細な情報については次の情報が参考になります。

濁点 (゛) / 半濁点 (゜) ですが、これらを厳密に判断するかは照合順序のバージョン (90 / 100 / 140) によって異なってくるようです。
実際には、90 までと 100 以降で異なってくるようです。

こんかいは、検証用に次のテーブルを作成しています。

DROP TABLE IF EXISTS T1
GO
CREATE TABLE T1(
C1 varchar(2) COLLATE Japanese_90_CI_AI,
C2 varchar(2) COLLATE Japanese_XJIS_100_CI_AI
)
INSERT INTO T1 VALUES
('は', 'は'),
('ひ', 'ひ'),
('ふ', 'ふ'),
('へ', 'へ'),
('ほ', 'ほ'),
('ぱ', 'ぱ'),
('ぴ', 'ぴ'),
('ぷ', 'ぷ'),
('ぺ', 'ぺ'),
('ぽ', 'ぽ')

 
このテーブルに対して、次のクエリを実行してみます。

SELECT * FROM T1 WHERE C1 = 'は'
SELECT * FROM T1 WHERE C2 = 'は'

今まで、SQL Server を使用されていた方であれば、「は」「ぱ」の行が取得されると思いますが、実際には次のような結果になります。
image
今回、照合順序は「CI」(Case Insensitive) を指定しているのですが、照合順序のバージョンによって、濁点 / 半濁点をアクセント記号として判断するかが異なってきていることが確認できるかと。
そもそもの話として、濁点 / 半濁点をアクセント記号とするかあるかとは思いますが、照合順序のバージョンによって、CI (アクセント記号を区別しない) の照合順序は、日本語の濁点 / 半濁点の認識が異なってきます。
「a」「a」については、アクセント記号の判断が、100 以降でも実施できますが、日本語の濁点 / 半濁点についてはアクセント記号扱いではなく、別の文字として認識されてしまうようですね。
AI / AS の説明をする場合、濁点 / 半濁点で説明をする機会が多いかと思いますが、この辺の動作は照合順序のバージョンによって重みづけが異なってくるため、この辺は意識しておきたいですね。

Share

Written by Masayuki.Ozawa

8月 12th, 2017 at 11:29 pm

Posted in SQL Server

Tagged with

Leave a Reply