为什么 table CHARSET 设置为 utf8mb4 而 COLLATION 设置为 utf8mb4_unicode_520_ci

Why is table CHARSET set to utf8mb4 and COLLATION to utf8mb4_unicode_520_ci

我最近注意到,每当我开始一个新的 WordPress 项目时,我的表的排序规则会自动从 utf8_unicode_ci 更改(当我从 phpMyAdmin 创建一个新的数据库时 select)至 utf8mb4_unicode_520_ci.

此外,我注意到在 phpMyAdmin 的“常规设置”下,服务器连接排序规则默认为 utf8mb4_unicode_520_ci

我 运行 MySQL 服务器 5.7.17 和 phpMyAdmin 4.6.6 Ubuntu 17.04.

我的问题如下:

  1. 为什么会这样?
  2. 如果可能,我该如何防止这种情况发生?由于 utf8mb4 我在将 WP 站点迁移到不支持它的旧 MySQL 服务器时遇到了问题。
  3. 第 2 点是否可取?在 utf8 上使用字符集 utf8mb4,在 utf8_unicode_ci 上使用排序规则 utf8mb4_unicode_520_ci 有什么好处吗?

以前只有utf8以后utf8mb4为默认字符集。现在utf8mb4为默认字符集。

过去,_general_ci 是默认排序规则;然后 _unicode_ci (Unicode 4.0) 更好,然后是 _unicode_520_ci (Unicode 5.20)。以后(MySQL8.0),默认为_0900_ci_ai(Unicode 9.0)。

与此同时,路上满是 MySQL 过去的错误造成的坑洼。而 WP 设计师们开着一辆大坦克,根本没有注意到坑洼。

MySQL 5.6 是一个大坑,吞噬了许多 WP 用户,因为索引的 767 限制以及 WP 索引过长 VARCHAR(255) 和使用 [= 的可能性11=]。拥有 5.7.17,您已经过关了。 (您未来迁移到 8.0 的过程不会那么坎坷。)

也就是说,在 5.7.7+ 上新创建的 databases/tables/columns 应该不会遇到 767 问题,但是从旧版本 (5.5.3+) 迁移的东西可能会有问题,特别是如果某些东西导致你改变到 utf8mb4.

怎么办?我可能会 运行 从 space 中拼出所有选项。因此,请提供数据的历史记录、升级路径(如果有)、当前设置、表的 ROW_FORMAT、列的 CHARACTER SETCOLLATION、[ 的输出=21=]

你应该在哪里?对于 5.7.7+,utf8mb4utf8mb4_unicode_520_ci 在可行的情况下。该字符集为您提供表情符号和所有中文(utf8 没有)。该排序规则是可用的最佳排序规则,尽管您可能很难注意到它重要的地方。

注意:排序规则名称的第一部分是它使用的唯一字符集。也就是说 utf8_unicode_ci 不适用于 utf8mb4