繰り返し符号や長音が同じ文字として取り扱われる

適用対象: Microsoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise EditionMicrosoft SQL Server 2005 Evaluation Edition

現象


日本語照合順序 (Japanese、Japanese_90、Japanease_XJIS_100、Japanese_Unicode) を使用している場合、繰り返し符号や長音が同じ文字として扱われる場合があります。
この結果、ユーザーは意図しない結果を得る場合があります。

例えば、以下のクエリでは繰り返し符号 ‘ヽ’ と長音‘ー’を ‘々’ と比べ、同一文字であれば☆に変換します。
---------------------------------
SELECT REPLACE('繰り返し記号 ヽ 長音 ー','々','☆') as REPLACE
---------------------------------


上記のクエリの結果は以下の通りです。
‘ヽ’ と ‘ー’ は ‘々’ と異なる文字ですが, 同じ文字として扱われます。
この結果、 ‘ヽ’ と ‘ー’ は ☆に変換されます。
---------------------------------
繰り返し記号 ☆ 長音 ☆
---------------------------------

解決方法


Japanese_BIN を照合順序として使用します。

例えば、 以下のようにCOLLATE 句を使用します。
--------------------------------- 
SELECT REPLACE('繰り返し記号 ヽ 長音 ー','々' COLLATE Japanese_BIN,'☆') as REPLACE;
--------------------------------- 

この結果、以下の結果を得ることが出来ます。
--------------------------------- 
繰り返し記号 ヽ 長音 ー
---------------------------------