皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。
今回は、日本語照合順序での 濁音、半濁音 の特殊な取り扱いについて紹介します。
[濁音、半濁音 の 特殊な取り扱い]
濁音、半濁音 の文字コードは以下のものになります。
濁音、半濁音 | SJIS | UTF-16 |
゛ (全角) | 0x814A | 0x309B |
゜ (全角) | 0x814B | 0x309C |
゙ (半角) | 0xDE | 0xFF9E |
゚ (半角) | 0xDF | 0xFF9F |
SQL Server で 日本語照合順序を使用している場合、半角文字の後に濁音、半濁音を追加すると、”半角文字” + “濁音、半濁音” が 1 文字として認識されます。
具体的に LIKE 検索を実行し、動作を見てみましょう。
SELECT CASE WHEN 'ハ゛A' LIKE '_A' COLLATE Japanese_CI_AI THEN // クエリ結果 // Check |
上記のクエリは、文字列 “ハ゛A” (半角カナ + 全角濁音 + 半角英数字 の3文字) を、文字列 “_A” (アンダースコア + 半角英数字) で LIKE 検索で指定した条件で検索ができた場合に “TRUE” を返すクエリになります。
LIKE 検索時に “_” (アンダースコア) を指定した場合、ワイルドカード文字として扱われ、今回の場合、”任意の 1 文字” + “A” の条件に合致した場合に “TRUE” が返されます。
今回の例では、 文字列 “ハ゛A” は 3文字 ですが、”半角文字” + “濁音、半濁音” が 1 文字と認識されるため、文字列 “ハ゛A” が 2文字 として扱われたことにより、”TRUE” の結果が返されています。
[関連情報]
日本語照合順序での漢数字 〇 (0x815A) の取り扱いについて
※ 本Blogの内容は、2014年12月 現在の内容となっております