让 Typecho 文章支持 emoji

解决 typecho 文章中输入 emoji 保存时出现 database query error ,debug 时报错误 general error 1366 incorrect string 。

请注意,本文编写于 142 天前,最后修改于 141 天前,其中某些信息可能已经过时。

今天在写完一篇带 emoji 文章点击保存后,网页 database query error 把我吓得一个激灵,赶紧后退,幸好文章还在,赶紧复制备份了先。
刚开始以为是 Typecho 对 8.0 mysql 数据库的兼容问题,于是尝试直接登入 PhpMyadmin 修改 sql ,然而还是报错,但是 phpMyadmin 提供了一个新的信息,general error 1366 incorrect string ,于是尝试搜索同样遇到此问题的小伙伴。

根本问题在于 Mysql 的历史遗留问题。来自译 | 永远不要在MySQL中使用utf8,改用utf8mb4 大致内容就是 Typecho 默认用的是 utf8 编码,并不是现在广为使用的utf8mb4 ,后者支持4个字节,前者只有三个,而 emoji 是四个字节的字符,自然会发生非法字符串的错误。但是 emoji 就是正义,不能向困难屈服!

首先登入 phpmyadmin ,在对应的数据库->操作中最底部找到排序规则,更改为utf8mb4

utf8_unicode_ci 比较准确,utf8_general_ci 速度比较快。通常情况下 utf8_general_ci 的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是 utf8_general_ci,所以新建数据库时一般选用utf8_general_ci 就可以了,如果是 utf8mb4 那么对应的就是 utf8mb4_general_ci utf8mb4_unicode_ci

编辑 typecho 目录下的 config.inc.php ,用 vim 编辑,找到 'charset' => 'utf8', 更改为 'charset' => 'utf8mb4', 然后:wq 保存即可,享受 emoji 带来的乐趣吧!

Twitter

添加新评论

评论列表