在MySQL中,我应该选择哪种排序规则?

49

在通过phpMyAdmin创建新的MySQL数据库时,我可以选择字符集(例如-默认、armscii8、ascii等和UTF-8)。我知道的是UTF-8,因为我总是在HTML源代码中看到它。但是默认的字符集是什么?这些选择之间有什么区别,我应该使用哪一个?


如果您想要更准确的结果,请使用 utf8_unicode_ci。参考 https://dev59.com/lnRC5IYBdhLWcg3wP-Zh - Jithu.S
在WordPress Codex上推荐使用unicode_general_ci:https://codex.wordpress.org/Installing_WordPress - John
3个回答

32

排序规则告诉数据库如何进行字符串匹配和排序。它应该与你的字符集匹配。

如果你使用UTF-8,排序规则应该是utf8_general_ci。这将按Unicode顺序排序(不区分大小写),并适用于大多数语言。它还保留了ASCII和Latin1的顺序。

默认的排序规则通常是latin1


7
不要使用任何utf8排序规则。它们只能存储最多3个字节的代码点。正确的UTF-8称为utf8mb4,它允许最多4个字节,因此包括表情符号。https://mathiasbynens.be/notes/mysql-utf8mb4 - user1318499
2
@user1318499 你能把你的评论转化为答案并提供更多细节吗? - Ortomala Lokni
1
我现在已经忘记了大部分的内容,所以我不太自信能写更多,但如果你想把它变成一个答案,所有的信息都应该在我的评论链接中。 - user1318499

20

排序规则实际上并不是默认设置,它将默认排序规则作为第一个选择。

我们正在讨论的是排序规则,或者说数据库在其文本类型中使用的字符集。您的默认选项通常基于区域设置,因此,除非您计划全球化,否则通常没问题。

排序规则还确定大小写和重音符号的敏感性(即“Big” ==“big”吗? 在CI的情况下,是这样的)。 查看MySQL列表获取所有选项。


UTF-8怎么样?我看到WordPress使用UTF-8?我应该使用UTF-8吗? - bbtang
1
UTF-8是Unicode。如果你不在一个英语国家,使用它是一个非常好的选择。 - Eric
4
我明白了。我们的项目目标是美国和全世界,因此我认为使用UTF-8会更好,我的想法对吗? - bbtang
是的,你是。那绝对是一个安全的排序方式。 - Eric
你的默认选项通常基于区域设置,因此除非你计划全球化,否则通常没问题。但是,不能让它就这样了。他在谈论phpMyAdmin,也就是网站。万维网难道不是全球化的吗?例如,如果您想要显示中文字符,那么区域设置通常不够用。请确保使用Unicode,即使您身处英语地区。您的访问者可能来自不同的国家,如果您可以显示他们的名称,那将是非常好的。 - Stijn de Witt

11
简短回答:在处理 MySql 和 MariaDB 的排序时,始终使用 utf8mb4(具体为 utf8mb4_unicode_ci)。
长回答:
MySQL 的 utf8 编码命名不当,并非真正的 UTF-8 编码。它不支持完整的 Unicode,可能导致数据丢失或安全漏洞。
幸运的是,MySQL 5.5.3(于 2010 年初发布)引入了一个新编码称为 utf8mb4,其映射到真正的 UTF-8,因此完全支持 Unicode。
详见:https://mathiasbynens.be/notes/mysql-utf8mb4 至于选择哪个特定的 utf8mb,使用 utf8mb4_unicode_ci,以便排序始终正确处理并最小化/不可察觉地降低性能。更多详细信息请参见:utf8_general_ci 和 utf8_unicode_ci 有什么区别?

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