SQL Server の辞書順照合順序を使用している環境で、漢数字の〇 (ゼロ) を含む検索が正しい結果を返さない

現象
SQL Server の辞書順照合順序を使用している環境で 漢数字の〇 (ゼロ) を含む文字列を検索条件に指定すると期待する結果が返らない場合があります。
原因
辞書順照合順序は、その辞書順照合順序に紐づくNLS ソートテーブルの情報を元に、文字の重み付けを判断し検索を行いますが、Japanese_90_* と Japanese_* 辞書照合順序 の NLS ソートテーブルでは、漢数字の〇 (ゼロ) はソートの重み付けを持つ文字として登録されてないため、結果として検索上、無視される文字となります。

そのため、like の検索条件で "三〇一" を検索すると、"三〇一" だけではなく "三一" や "三〇〇一" のデータも検索結果に含まれて出力されます。
回避策
漢数字のゼロを検索対象文字として使用する必要がある場合、SQL Server のバイナリ照合順序を使用します。照合順序はデータベース単位、カラム単位、クエリー単位で指定することが可能です。

照合順序の変更やクエリー単位での指定が出来ない場合、格納するデータや検索条件に使用する漢数字の〇 (ゼロ) を全て、○ (0x819b) などの他の文字に置き換えて使用します。

なお、SQL Server 2008 以降では、Japanese_Bushu_Kakusu_100_* もしくは Japanese_XJIS_100_* 照合順序を使用することで、この現象を回避できます。
プロパティ

文書番号:912509 - 最終更新日: 12/15/2014 19:18:00 - リビジョン: 3.0

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2012 Business Intelligence, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2014 Business Intelligence, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbtshoot kbharmony kbexpertiseinter kbexpertiseadvanced KB912509
フィードバック