個人的にはutf8_unicode_ci
、検索したい結果に対して大文字と小文字が一般的に重要ではないと予想される場合は、を使用します。
照合は、実行時だけでなく、MySQLがインデックスを作成するときにも使用されます。したがって、これらの列のいずれかがインデックスに表示される場合、その照合の比較ルールに従ってデータを検索することは、これまでにないほど高速になります。
大文字と小文字を区別しないマッチングが必要ない場合は、上または下を適用しないでください。代わりにBINARY
、utf8列の前にキーワードを適用して、照合によるものではなく、リテラルのコードポイント比較を強制します。
mysql> create table utf8 (name varchar(24) charset utf8 collate utf8_general_ci, primary key (name));
Query OK, 0 rows affected (0.14 sec)
mysql> insert into utf8 values ('Roland');
Query OK, 1 row affected (0.00 sec)
mysql> insert into utf8 values ('roland');
ERROR 1062 (23000): Duplicate entry 'roland' for key 'PRIMARY'
mysql> select * from utf8 where name = 'roland';
+--------+
| name |
+--------+
| Roland |
+--------+
1 row in set (0.00 sec)
mysql> select * from utf8 where binary name = 'roland';
Empty set (0.01 sec)
このような場合、MySQLは最初に列の値のコピーを作成し、その大文字と小文字を変更してから比較を適用する必要があるため、これは下位または上位を使用するよりもはるかに高速です。BINARYを配置すると、最初にインデックスを使用して一致を検索し、次に値が等しくないことが検出されるまでコードポイントごとの比較を実行します。これにより、通常は高速になります。