Typecho 默认是不支持 Emoji 表情的,当你评论中有 Emoji 的话,就会报这个错误。这个是因为编码的问题造成的。Mysql 默认使用的是 utf8 字符集,utf8 字符集的编码范围 u0000-uFFFF,而 Emoji 是在 Unicode 位于 u1F601-u1F64F 区段的字符。所以评论中带有 Emoji 表情才会报错。
知道了问题,那解决起来就很容易了,我们只需要修改 Mysql 中评论字段的字符集编码为 utf8mb4 即可。
评论字段是对应的博客数据库中 typecho_comments
表中的 text
字段,我们可以使用数据库工具,把该字段的编码修改为 utf8mb4_general_ci
。也可以用下面命令行来修改。
# 首先进入你的博客使用的数据库
use blogDatabase;
# 然后修改 typecho_comments 表中 text 字段字符集
ALTER TABLE typecho_comments CHANGE text text text CHARACTER SET utf8mb4;
然后修改网站的配置文件,打开网站根目录,找到 config.inc.php
文件,把 charset
的值改为 urf8mb4
。
好了,现在我们就可以在评论里使用 Emoji 表情了。
后面又遇到了一个问题,就是使用手机进行评论的话也会报这个错,只有文字的评论也会报。非常奇怪,在电脑端是没有问题的。
我们打开 debug 模式,来看一下具体的 log 信息。同样在 config.inc.php
目录下加入 define('__TYPECHO_DEBUG__', true);
来开启 debug。然后我们得到了下面的报错信息 1406 Data too long for column 'XXX' at row 1
。
报错提示字段太长了,可是我只输入一个字符也会报错。然后在查询资料,得知 Mysql 有一个严格模式。
我们只要找到 Mysql 的配置文件 my.cnf,把 sql-mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
中的 STRICT_TRANS_TABLES
删掉,然后重启 Mysql 服务,问题就解决了。