MySQL - Collate

5

当我创建一个数据库时,会被要求选择默认排序规则;当我创建一个表时,会被要求选择排序规则。utf8_general_ci还是...latin...?如何区分哪个是正确的呢?


2
*_ci 是不区分大小写的,这意味着如果您执行类似 WHERE field like '%abc%' 的操作,它将匹配 babc 或 BaBC。 - Andreas Wong
2
现在通常都使用utf8,这样可以存储各种脚本,而不仅仅是拉丁字母。确保您的客户端应用程序(如php等)也使用相同的编码。 - knittl
谢谢。是什么让你选择使用CI或CS?我想不出任何关于CS的生活例子。 - lunar
1个回答

13

排序规则(collation)决定了字符的排序顺序,它是一组比较字符的规则。任何一个字符集始终至少有一个排序规则。排序规则名称的结尾cicsbin分别表示不区分大小写区分大小写二进制。例如,像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 |
+----------------------+-------------------+

1
谢谢。对于第二个例子,我想应该是 'cs'。 - lunar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接