我最近注意到,每当我开始一个新的WordPress项目时,我的表的排序会自动从utf8_unicode_ci
(当我从phpMyAdmin创建一个新的DB时选择)更改为utf8mb4_unicode_520_ci
。
另外,我注意到在phpMyAdmin的“General Settings”下,服务器连接排序规则默认为utf8mb4_unicode_520_ci
。
我在Ubuntu 17.04上运行MySQL服务器5.7.17和phpMyAdmin 4.6.6。
我的问题如下:
1.为什么会发生这种情况?
1.如果可能的话,我该如何防止这种情况?由于utf8mb4
,我在将WP站点迁移到不支持它的旧MySQL服务器时遇到了问题。
1.第2点是否可取?使用字符集utf8mb4
而不是utf8
,使用排序规则utf8mb4_unicode_520_ci
而不是utf8_unicode_ci
有什么好处吗?
1条答案
按热度按时间rjjhvcjd1#
在过去,只有
utf8
(又名utf8mb3
);在未来,utf8 mb 4将是默认字符集。现在utf8mb4
是默认字符集。过去,
_general_ci
是默认排序规则;然后是_unicode_520_ci
(Unicode 5.20)。在未来(MySQL 8.0)中,默认值将是_0900_ci_ai
(Unicode 9.0)。与此同时,道路上到处都是由MySQL过去的错误所造成的坑洞。而WP的设计者们开着一辆大坦克,却没有注意到这些坑洞。
MySQL 5.6是一个巨大的坑洞,吞噬了许多WP用户,因为在过长的
VARCHAR(255)
上有767个索引和WP索引的限制,并且可能使用utf8mb4
。您已经拥有了5.7.17。(您将来迁移到8.0时将不会那么颠簸。)也就是说,在5.7.7+上新创建的数据库/表/列应该不会遇到767问题,但从旧版本(5.5.3+)迁移的内容可能会有问题,特别是当某些内容导致您更改为utf8 mb 4时。
怎么办?我可能会用尽空间试图拼出所有的选项。因此,提供数据的历史记录,升级路径(如果有的话),当前设置,表的
ROW_FORMAT
,列的CHARACTER SET
和COLLATION
,SHOW VARIABLES LIKE 'char%';
的输出你应该在哪里?对于5.7.7+,
utf8mb4
和utf8mb4_unicode_520_ci
,只要可行。这个字符集给你Emoji和所有的中文(utf8没有)。这个排序是最好的,虽然你可能很难注意到它的重要性。注意:排序规则名称的第一部分是它唯一可以使用的字符集。也就是说,
utf8_unicode_ci
不能与utf8mb4
一起使用。对于MySQL 8.0,有一个比标题中提到的更好的排序规则。一般来说,只需为所选的字符集使用默认排序规则(除非您有一些语言特定的兼容性问题)。