皆さん、こんにちは。 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' // クエリ結果 // Check |
上記のクエリでは、文字列 ”12” を、”1〇2” で LIKE 検索を実施し、LIKE 検索で指定した文字で検索ができた場合に “TRUE” を返すクエリになります。
クエリ結果を見ると、検索対象文字 “12” には、漢数字 〇 は含まれていませんが、LIKE 検索でヒットされます。
なお、漢数字 〇 を含む文字列で LIKE 検索を実施したい場合には、明示的に バイナリの照合順序及び SQL Server 2008 以降であれば、Japanese_XJIS_100、Japanese_Bushu_Kakusu_100を COLLATE 句 で指定することにより、実現することが可能です。
SELECT CASE WHEN '12' LIKE '1〇2'COLLATE Japanese_BIN
Check |
[関連情報]
※ 本Blogの内容は、2014年12月 現在の内容となっております