【问题标题】:Why is table CHARSET set to utf8mb4 and COLLATION to utf8mb4_unicode_520_ci为什么表 CHARSET 设置为 utf8mb4 而 COLLATION 设置为 utf8mb4_unicode_520_ci
【发布时间】:2017-09-24 10:45:20
【问题描述】:

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

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

我在 Ubuntu 17.04 上运行 MySQL Server 5.7.17 和 phpMyAdmin 4.6.6。

我的问题如下:

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

【问题讨论】:

    标签: mysql wordpress phpmyadmin character-encoding collation


    【解决方案1】:

    过去只有utf8以后utf8mb4将成为默认字符集。现在utf8mb4是默认字符集。

    过去,_general_ci 是默认排序规则;然后_unicode_ci(Unicode 4.0)更好,然后_unicode_520_ci(Unicode 5.20)。未来(MySQL 8.0)默认为_0900_ci_ai(Unicode 9.0)。

    与此同时,道路上充满了 MySQL 过去的错误所产生的坑洼。而 WP 设计师正在驾驶一个没有注意到坑洼的大水箱。

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

    也就是说,在 5.7.7+ 上新创建的数据库/表/列不应该遇到 767 问题,但是从旧版本(5.5.3+)迁移的东西可能会出现问题,特别是如果某些东西导致您更改为 utf8mb4 .

    怎么办?我可能会用完空间试图拼出所有选项。所以提供数据的历史、升级路径(如果有的话)、当前设置、表的ROW_FORMAT、列的CHARACTER SETCOLLATIONSHOW VARIABLES LIKE 'char%';的输出

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

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

    【讨论】:

    • 很好的答案,谢谢瑞克。我唯一的问题是迁移到较旧的 MySQL 服务器时。因此,为了将来的参考,如果可能的话,最好尝试升级 MySQL 服务器,而不是将 CHARSET 和 COLLATION 转换回 Unicode 4.0。再次感谢。
    • @ТомицаКораћ - 谢谢你吹嘘我的自我。是的,前进,而不是后退。
    • @RickJames 下一个主要整理版本支持什么时候发布(例如0900_ci_ai),请问我们在哪里可以关注它的发展?在 Google 上引用它会产生零结果。
    • 快速浏览似乎说 520 和 900 的基于拉丁语的排序规则是相同的。我不知道西里尔文。 (转动我的手臂,我将编写一个程序来进行分析。)
    • MySQL 8.0.11 于 2018 年 4 月 19 日正式发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2019-05-18
    • 2021-11-10
    • 2019-09-12
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多