日本語照合順序での長音、繰り返し符号の取り扱いについて

 

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

今回は、日本語照合順序 (Japanese、Japanese_90、Japanese_XJIS_100、Japanese_Unicode) での、長音、繰り返し符号の特殊な取り扱いについて紹介します。

 

[長音、繰り返し符号の特殊な取り扱い]

長音、繰り返し符号には、以下のものが存在します。

 

長音符号 SJIS UTF-16
0x815B 0x30FC
0x815C 0x2015
0xB0 0xFF70

 

繰り返し符号 SJIS UTF-16
0x8152 0x30FD
0x8153 0x30FE
0x8154 0x309D
0x8155 0x309E
0x8158 0x3005

 

SQL Server で 日本語照合順序を使用している場合、長音、繰り返し符号は、特殊な文字として、全て等価の符号として取り扱われます。そのため、長音、繰り返し符号で検索を実施した場合には、全ての 長音、繰り返し符号が同じ符合(文字)として認識されるようになります。

 

具体的に REPLACE 関数を実行し、動作を見てみましょう。

SELECT REPLACE('長音符号 ー 繰り返し符号 ヽ ','々','☆') as REPLACE;// クエリ結果 //REPLACE---------------------------------長音符号 ☆ 繰り返し符号 ☆

上記のクエリでは、文字列 長音符号 ー 繰り返し符号 ヽ” の中に、 ”々” が含まれている場合、 ”☆” に変換するというクエリになります。

クエリの結果を見ると、長音、繰り返し符号が、 ”☆” に変換されていることがわかると思います。 これは、長音符号 “ー”、繰り返し符号 ”ヽ”、繰り返し符号 ”々” がすべて同じ符号(文字) として扱われるためとなります。

 

しかしながら、特定の長音、繰り返し記号のみを REPLACE 関数などで変換する必要がある状況もあると思います。 この場合、明示的に バイナリの照合順序 (Japanese_BIN など)COLLATE 句 で指定することにより、実現することが可能です。

SELECT REPLACE('長音符号 ー 繰り返し符号 ヽ ','々' COLLATE Japanese_BIN,'☆') as REPLACE; // クエリ結果 //REPLACE---------------------------------長音符号 ー  繰り返し符号 ヽ

 

バイナリの照合順序の場合は、文字の比較の際に、文字コードで比較が行われ、長音、繰り返し符号でも特殊な取り扱いはされません。そのため、明示的に バイナリの照合順序を COLLATE 句 で指定することにより、各長音、繰り返し符号が別の符号(文字) として認識させることが可能になります。

 

[関連情報] 日本語照合順序での漢数字 〇 (0x815A) の取り扱いについて 日本語照合順序での 濁音、半濁音 の取り扱いについて

 

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