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)
这应该比使用 lower 或 upper 快得多,因为在这些情况下,MySQL 首先需要复制列值并修改其字母大小写,然后应用比较。使用 BINARY 时,它将首先使用索引来查找匹配项,然后逐个代码点进行代码点比较,直到发现值不相等,这通常会更快。