照合順序 概要 | 野良エンジニアの足跡

照合順序 概要

こんにちは、naginoです。


ちょっと IT コーディネーターのケース研修前でバタバタしてしまい、筆不精になってしまっています。

ですが、以前書きかけてそのまま未公開だった記事があったので、この機会にアップします。

SQL Serverの日本語環境では、照合順序が色々あります。


SQL Server で、例えば「あ」と「ア」が区別されないのは、この照合順序が大抵 Japanese_90_CI_AS などになっているからであって、Japanese_90_BIN2 などを指定すると区別されます。

このように照合順序ではどの文字を同一とみなすか、どの文字はある文字の前か、後か、といったことを指定することができます。

ここをよく SQL Server の仕様だと誤解されている方が多いので、注意してください。


ただし、SQL Server 2005 や 2008 ではデフォルトの照合順序が 1 つ前の世代のものとなっているため、インストール時に明示的に指定しないと機能を生かせません。

そこで、照合順序の基礎知識をまとめてみます。


照合順序はまず、以下の2種類に大別できます。

-1. SQL 照合順序

-2. Windows 照合順序

SQL 照合順序は古い環境との互換性のみが目的で残っているだけのため、現在ではほとんどのケースでは Windows 照合順序を選択することになります。


Windows 照合順序は、以下の 5 種類に分類できます。

-1.Japanese_Unicode (7.0から)

-2.Japanese (2000から)

-3.Japanese_90 (2005から)

-4.Japanese_XJIS_100 (2008から)

-5.Japanese_Bushu_Kakusu_100 (2008から)

それぞれの照合順序は、上記のキーワードの後ろに詳細なパラメータが付きます。

-2. の Japanese は、たとえば Japanese_CI_AS、Japanese_CS_AI などいくつかあります。

-3. の Japanese_90 は、たとえば Japanese_90_CI_AS などいくつかあります。

これらは、-1.Japanese_Unicode の上位が -2.Japanese、そしてそのさらに上位が -3.Japanese_90、そのまたさらに上位が -4.Japanese_XJIS_100 となります。

そのため、互換性が必要な場合を除いて、通常は上位の照合順序を選択します。

また、必要に応じて SQL の COLLATE 句で照合順序を指定して処理することができます。

なお、-5.Japanese_Bushu_kakusu_100 は 2008 からの新しい照合順序で、部首画数順にソートします。

Vista から OS でもサポートされていた順序ですね。

また、パラメータが BIN もしくは BIN2 のものについては、文字のバイナリコードでソートされます。

BIN は一部ソート順が正しくないという不具合があるため、基本的には上位の BIN2 を使用します。


ちなみに、それぞれサポートする文字の範囲は以下の通り(らしい)です。

-1.Japanese_Unicode ⇒ Unicode 2.0

-2.Japanese ⇒ Unicode 2.1

-3.Japanese_90 ⇒ Unicode 3.0

-4.Japanese_XJIS_100 ⇒ Unicode 5.0

-5.Japanese_Bushu_Kakusu_100 ⇒ Unicode 5.0

Unicodeのバージョンが上のほうが、扱える文字が増えます。

その点でも、互換性が特に必要でない限りは、上位の照合順序を使用するほうが良いと思います。


さて、簡潔にまとまったので今回はこのあたりとしますが、機会があれば CI や AS といったパラメータについても別途記事にします。

というのも、日本語の濁点の扱いなどが少々分かりにくいのです。