为什么表CHARSET设置为utf8mb4,COLLATION设置为utf8mb4_unicode_520_ci

时间:2017-04-26 20:46:12

标签: mysql wordpress phpmyadmin character-encoding collation

我最近注意到,当我开始一个新的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点是否可取?使用charset utf8mb4优于utf8和整理utf8mb4_unicode_520_ci优于utf8_unicode_ci是否有任何好处?

1 个答案:

答案 0 :(得分:26)

过去只有utf8;将来,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 SETCOLLATION,{的输出{1}}

你应该在哪里?对于5.7.7 +,SHOW VARIABLES LIKE 'char%';utf8mb4,只要实际可行。那个charset给你表情符号和所有中文(utf8没有)。尽管您可能很难注意到它的重要性,但是整理是最好的。

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