Typecho 评论的时候报错 Database Query Error 解决方案

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 服务,问题就解决了。

推荐阅读更多精彩内容