照合順序は,文字列を比較およびソトする方法を定義した一連のルルです。MySQLでのそれぞれの照合順序は,単一の文字セットに属しています。すべての文字セットには少なくとも1つの照合順序が属し,ほとんどの文字セットのは2つ以上の照合順序が属しています。
照合順序は重みに基づいて文字を順序付けします。文字セット内のそれぞれの文字が重みにマップされています。重みが等しい文字は同等と見なされ,重みが等しくない文字は,その重みの相対的な大きさに従って比較されます。
WEIGHT_STRING ()
関数を使用すると,文字列内の文字の重みを確認できます。重みを示した返される値はバナリ文字列であるので,十六进制(WEIGHT_STRING (
を使用して重みを出力可能な形式で表示すると便利です。次の例は,大文字と小文字を区別しない非バstr
))“AaBb”
内の大文字と小文字で重みは異ならないが、バ以及ナリ文字列である場合は異なることを示します。
mysql> SELECT HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci));+------------------------------------------------------+ | 十六进制(WEIGHT_STRING(核对latin1_swedish_ci AaBb )) | +------------------------------------------------------+ | 41414242 | +------------------------------------------------------+ mysql >选择十六进制(WEIGHT_STRING(二进制AaBb));+-----------------------------------+ | 十六进制(WEIGHT_STRING(二进制的AaBb ')) | +-----------------------------------+ | 41614262 | +-----------------------------------+
セクション10.4.1 "照合順序の実装タereplicationプ"で説明するように,MySQLでは複数の照合順序の実装をサポトしています。これらの中には,再コンパ,MySQLに追加できるものもあります。
8ビットの文字セットの単純な照合順序。
Unicode文字セットのUCAベスの照合順序。
バ邮箱ナリ(
) 照合順序。xxx
_bin
以降のセクションでは,最初の2種類の照合順序を既存の文字セットに追加する方法について説明します。バイナリ照合順序については,既存の文字セットにもすでに用意されているので,ここでは追加方法は説明しません。
新しい照合順序を追加する手順のサマリ:
照合順序idを選択します。
照合順序に名前を付ける構成情報を追加し,文字順序付けル。
サバを再起動します。
照合順序が存在していることを検証します。
ここでの説明では,MySQLを再コンパMySQLルすることなく追加できる照合順序だけを取り上げます。再コンパイルを必要とする照合順序(Cソースファイル内の関数を利用して実装されたものなど)を追加するには,セクション10.3 "文字セットの追加"の手順を使用してください。ただし,完全な文字セットに必要なすべての情報を追加するのではなく,既存の文字セットに合わせて適切なファイルを変更します。つまり,文字セットの現在の照合順序ですでに存在するものに基づいて,新しい照合順序のデータ構造,関数,構成情報を追加します。
既存の照合順序を変更すると,その照合順序を使用するカラムでインデックスの行順序に影響が及ぶことがあります。この場合,間違ったクエリー結果などの問題が起こらないように,これらのインデックスを再構築してください。詳細は,セクション2.11.3 "テブルまたはンデックスの再構築が必要かどうかのチェック"を参照してください。
追加のリソス
Unicode照合順序アルゴリズム(UCA)の仕様:http://www.unicode.org/reports/tr10/
地区数据标记语言(LDML)の仕様:http://www.unicode.org/reports/tr35/
MySQLブログ記事「新しいUnicode照合順序を追加するための手順」:http://blogs.10bet靠谱mysql.com/peterg/2008/05/19/instructions-for-adding-a-new-unicode-collation/