当我创建一个数据库时,会被要求选择默认排序规则;当我创建一个表时,会被要求选择排序规则。utf8_general_ci还是...latin...?如何区分哪个是正确的呢?
排序规则(collation)决定了字符的排序顺序,它是一组比较字符的规则。任何一个字符集始终至少有一个排序规则。排序规则名称的结尾ci、cs和bin分别表示不区分大小写、区分大小写和二进制。例如,像utf8_bin
这样的二进制排序规则通常也是区分大小写的,因为它基于字符串的数值进行二进制字符串比较。
这意味着,如果您想进行不区分大小写的查询,即将a和A视为相同,请使用以ci结尾的排序规则。如果您想进行区分大小写的查询,即将a和A视为不同,请使用以cs或bin结尾的排序规则。
如果未选择任何排序规则,则应用标准级别。MySQL中有各种级别的排序规则,例如可以通过以下方式显示:
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
WHERE field like '%abc%'
的操作,它将匹配 babc 或 BaBC。 - Andreas Wong