照合順序は、文字列を比較およびソートする方法を定義した一連のルールです。 MySQL でのそれぞれの照合順序は、単一の文字セットに属しています。 すべての文字セットには少なくとも 1 つの照合順序が属し、ほとんどの文字セットのは 2 つ以上の照合順序が属しています。
照合順序は重みに基づいて文字を順序付けします。 文字セット内のそれぞれの文字が重みにマップされています。 重みが等しい文字は同等と見なされ、重みが等しくない文字は、その重みの相対的な大きさに従って比較されます。
WEIGHT_STRING()
関数を使用すると、文字列内の文字の重みを確認できます。 重みを示した返される値はバイナリ文字列であるので、HEX(WEIGHT_STRING(
を使用して重みを出力可能な形式で表示すると便利です。 次の例は、大文字と小文字を区別しない非バイナリ文字列の場合に、str
))'AaBb'
の文字の大文字と小文字で重みが異なることはなく、バイナリ文字列の場合に重みが異なることを示しています:
mysql> SELECT HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci));
+------------------------------------------------------+
| HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci)) |
+------------------------------------------------------+
| 41414242 |
+------------------------------------------------------+
mysql> SELECT HEX(WEIGHT_STRING(BINARY 'AaBb'));
+-----------------------------------+
| HEX(WEIGHT_STRING(BINARY 'AaBb')) |
+-----------------------------------+
| 41614262 |
+-----------------------------------+
セクション10.14.1「照合順序の実装タイプ」で説明するように、MySQL では複数の照合順序の実装をサポートしています。 これらの中には、再コンパイルせずに、MySQL に追加できるものもあります。
8 ビットの文字セットの単純な照合順序。
Unicode 文字セットの UCA ベースの照合順序。
バイナリ (
) 照合順序。xxx
_bin
次のセクションでは、最初の 2 つのタイプのユーザー定義照合を既存の文字セットに追加する方法について説明します。 バイナリ照合順序については、既存の文字セットにもすでに用意されているので、ここでは追加方法は説明しません。
組込み照合の再定義はサポートされていないため、予期しないサーバー動作が発生する可能性があります。
新しいユーザー定義照合を追加する手順のサマリー:
照合順序 ID を選択します。
照合順序に名前を付ける構成情報を追加し、文字順序付けルールについて記述します。
サーバーを再起動します。
サーバーが照合順序を認識していることを確認します。
この手順では、MySQL を再コンパイルせずに追加できるユーザー定義の照合のみについて説明します。 再コンパイルを必要とする照合順序 (C ソースファイル内の関数を利用して実装されたものなど) を追加するには、セクション10.13「文字セットの追加」の手順を使用してください。 ただし、完全な文字セットに必要なすべての情報を追加するのではなく、既存の文字セットに合わせて適切なファイルを変更します。 つまり、文字セットの現在の照合順序ですでに存在するものに基づいて、新しい照合順序のデータ構造、関数、構成情報を追加します。
既存のユーザー定義照合を変更すると、その照合を使用するカラムのインデックスの行の順序に影響する可能性があります。 この場合、間違ったクエリー結果などの問題が起こらないように、これらのインデックスを再構築してください。 セクション2.11.13「テーブルまたはインデックスの再作成または修復」を参照してください。
追加のリソース
全文検索の照合順序を追加する方法を示す例: セクション12.10.7「全文インデックス付けのためのユーザー定義照合の追加」
Unicode 照合順序アルゴリズム (UCA) の仕様: http://www.unicode.org/reports/tr10/
Locale Data Markup Language (LDML) の仕様: http://www.unicode.org/reports/tr35/