キャラクタセットとは、シンボルとエンコードのセットです。照合順序とは、キャラクタセット内の文字を比較するためのルールを集めたものです。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.1 一般の文字セットおよび照合順序
‘A’ = 0、‘B’ = 1、‘a’ = 2、‘b’ = 3
上記のような場合を考える。
‘A’ | シンボル |
0 | エンコードされた‘A’ |
‘A’ = 0、‘B’ = 1、‘a’ = 2、‘b’ = 3 | キャラクタセット |
となる。
SHOW CHARACTER SET;
でリストアップできる。
照合順序とは、文字列に関する並び替えや比較方法に関する規則である。'a' が 'A' の小文字であることは人間には自明であるが、機械にとってはそうではなく、何かしらの方法で教えてあげないといけない。
"abc".upcase => "ABC"
というRubyのコードも照合順序が可能にしているのだろう。MySQLではキャラクタセットには少なくとも1つの照合順序が含まれているが、複数の照合順序が含まれていることもある。
SHOW COLLATION LIKE 'utf8%';
の場合、utf8の照合順序を調べることが出来る。照合順序の名称は一定のルールに基づいている。キャラクタセット名で始まり、大体は言語名を含み、末尾は以下のとおりである。例えば、 utf8_general_ci のような感じである。
_ci | 大文字と小文字が区別されない(Case In-sensitive) |
_cs | 大文字と小文字が区別される(Case Sensitive) |
_bin | バイナリ(結果的に大文字と小文字が区別される) |
メールアドレスやIDは、大文字と小文字を区別しないCase Insensitiveにするのがベターである。
abcde@example.com と ABCDE@EXAPLE.COM が別物だと区別され登録されてしまうため。