日本語照合順序での漢数字 〇 (0x815A) の取り扱いについて

 

皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。

今回は、日本語照合順序での 漢数字 〇 の特殊な取り扱いについて紹介します。

 

[漢数字 〇 特殊な取り扱い]

漢数字 〇 の文字コードは以下のものになります。

SJIS UTF-16
漢数字 〇 0x815A 0x3007

 

SQL Server で 日本語照合順序を使用している場合、一部の日本語照合順序 (Japanese、Japanese_90、Japanese_Unicode) では、ソートの重み付けを持つ文字として 漢数字 〇 が登録されていないため、漢数字 〇 を含む文字列で LIKE 検索した場合に、意図しない検索結果が返る場合があります。

具体的に LIKE 検索を実行し、動作を見てみましょう。

 

SELECT CASE WHEN '12' LIKE '1〇2' THEN'TRUE'ELSE 'FALSE' END AS 'Check'// クエリ結果 //Check---------------------------------TRUE

上記のクエリでは、文字列 ”12” を、”1〇2” で LIKE 検索を実施し、LIKE 検索で指定した文字で検索ができた場合に “TRUE” を返すクエリになります。

クエリ結果を見ると、検索対象文字 “12” には、漢数字 〇 は含まれていませんが、LIKE 検索でヒットされます。

 

なお、漢数字 〇 を含む文字列で LIKE 検索を実施したい場合には、明示的に バイナリの照合順序 及び SQL Server 2008 以降であれば、Japanese_XJIS_100、Japanese_Bushu_Kakusu_100COLLATE 句 で指定することにより、実現することが可能です。

 

SELECT CASE WHEN '12' LIKE '1〇2' COLLATE Japanese_BINTHEN'TRUE'ELSE 'FALSE' END AS 'Check'// クエリ結果 //Check---------------------------------FALSE

 

[関連情報] 日本語照合順序での長音、繰り返し符号の取り扱いについて 日本語照合順序での 濁音、半濁音 の取り扱いについて

 

※ 本Blogの内容は、2014年12月 現在の内容となっております