SQL SERVER 照合順序

SQL SERVER

照合順序

照合順序とは

SQL Server の照合順序とは、データをソートする際の文字の大小関係を比較する基準のことを照合順序 (collation) と呼んでいます。
例えば、「川」と「海」ではどちらが早く取得・表示されるのか、「あ」「ア」「ア」をソートする時どのようにソートされたいのかといった、文字の大小関係を決めているのが照合順序です。

また、ソートだけでなく検索でマッチするかどうかも照合順序で決まります。
「ア」「ア」を同じとみなすかどうかとか。

また、データのインデックス作成時にも照合順序は使われます。
インデックスの項目がキャラクタ( char, nchar, varchar, nvarchar, text, ntext)などの場合、項目の値順にインデックス行を並び替えるために使われます。

仕事で決まった順にソートして表示したり、該当するデータを照合抽出することは当たり前のことで、そのソートや照合する際に照合順序 (文字の大小関係) はとても重要な要素です。

で、照合順序の決め方なのですが、なんか複雑で良くわからないのです・・・

日本語照合順序の違い

ソート順、文字の大小関係の定義が違う。
辞書順に並び変えた場合の並び順が、使用している日本語辞書の順になることを表しています

Japanese_XJIS
Japanese Unicode 2.0(80), Unicode 3.2(90)に対応
Unicode 5.0(100)に対応
Japanese_Bushu_Kakusu 部首画数順、Unicode 5.0(100)に対応
Japanese_Unicode SQL Server 7.0 との互換性のためだけに残されています

単純に考えると、最新版のJapanese_XJISを使えば良いのかと思います。

日本語照合のバージョン

上で日本語辞書を指定し、次はコードのバージョンを指定します。

記載なし(80) SQL Server 2000, Unicode 2.0
90 SQL Server 2005, Unicode 3.2
100 SQL Server 2008, Unicode 5.0

要は、Japanese_100の指定はできないってことですね。
Japanese_XJISは100を指定しなくてもデフォルトで100なのかな?

日本語照合オプション

C : 大文字と小文字の区別
 CS(CaseSensitivity) 大文字と小文字を区別する
 CI(CaseInsensitive) 大文字と小文字を区別しない

A:アクセントの区別
 AS(AccentSensitivity) アクセントを区別する
 AI(AccentInsensitive) アクセントを区別しない
 ※日本語の場合は清音と濁音・半濁音の区別。区別しない場合は AI 。

K:ひらがなとカタカナの区別
 KS(KanatypeSensitive) ひらがなとカタカナを区別する。
 ※区別しない場合はオプションを指定しない。

W:1 バイト文字と 2 バイト文字の区別
 WS(WidthSensitivity) 1 バイト文字と 2 バイト文字を区別する。(w と w 等)
 ※区別しない場合はオプションを指定しない。

SC:Supplementary Character(補助文字)を認識するかどうかの区別
 オプションをしてした場合は、Supplementary Character(補助文字)を認識する。
 ※文字数を返す LEN 等の動作に影響する。
 ※区別しない場合はオプションを指定しない。

日本語照合オプション2

BIN:バイナリ並べ替え
 SQL Server 2000 以前の古いバージョンとの互換目的。
 (最初の一文字のみコードポイントで比較、以降はバイトごとに比較)

BIN2:バイナリ並べ替え
  すべての文字をコードポイントで比較する。

ざっと日本語を取り扱う場合の照合順序を抜粋して書いてみました。
人名や住所なのでソートや抽出を行う時に関与してきますので、抽出がおかしいときは見直してください。

以上、「SQL SERVER 照合順序」についての備忘録でした。