キャラクタセット とは、シンボルとエンコードのセットです。照合順序とは、キャラクタセット内の文字を比較するためのルールを集めたものです。架空のキャラクタセットを例にして、キャラクタセットと照合順序の違いを見てみましょう。
次の 4
文字で構成されるアルファベットがあるとします:‘A
’、‘B
’、‘a
’、‘b
’次のように、各文字に対して番号を指定します:‘A
’
= 0、‘B
’ =
1、‘a
’ =
2、‘b
’ =
3 文字‘A
’はシンボルであり、数字0はエンコードされた‘A
’です。4文字のすべてとそれぞれのエンコードを組み合わせたものをキャラクタセットと呼びます。
次に、文字列値‘A
’と‘B
’を比較してみましょう。最も簡単に比較するには、エンコードを確認します。‘A
’は0、‘B
’は1です。0は1よりも小さいので、‘A
’は‘B
’よりも小さいと表現することができます。今ここで行ったのは、キャラクタセットに対する照合順序の適用です。照合順序はルールの集まりであり、上記の場合にはルールは:「エンコードの比較」(この場合ルールは1つのみになります)。これは可能な照合順序のうちで最も単純なものであり、バイナリ照合順序と呼ばれています。
しかし、小文字と大文字を等しいと表現したい場合にはどうなるのでしょうか。その場合、少なくとも次の
2
つのルールが必要です。(1)小文字の‘a
’および‘b
’が大文字の‘A
’および‘B
’と同じであると見なす。(2)その後にエンコードを比較する。これは大文字と小文字を区別しない照合順序と呼ばれ。バイナリ照合順序よりも少し複雑です。
実際は、大半のキャラクタセットに多数の文字が含まれています。‘A
’と‘B
’だけではなく、アルファベットの全体から構成されています。ときには複数のアルファベットや、数千文字からなる東洋の書記体系に、多くの特殊記号や終止符が付属することもあります。また、実際には大半の照合順序に多くのルールがあります。大文字と小文字が区別されないだけではありません。アクセントが区別されない(「アクセント」はドイツ語での‘Ö
’のように文字に追加されるマーク)、あるいは複数文字マッピング(ドイツ語照合順序のどちらかにおける‘Ö
’
=
‘OE
’のルールなど)といったルールがあります。
MySQLでは以下が可能です。
各種のキャラクタセットを使用して文字列を保存する。
各種の照合順序を使用して文字列を比較する。
同じサーバ、同じデータベース、あるいは同じテーブル内の異なったキャラクタセットまたは照合順序と文字列を結合する。
任意のレベルでキャラクタセットと照合順序を指定できるようにする。
MySQLはこれらの点において、他のDBMSに大きく差をつけています。ただし、新機能を効率的に使用するには、利用可能なキャラクタセット、各デフォルトの変更方法、各種の列演算子による処理内容を知っておかなければなりません。