文章目录

Typecho 评论以及发布文章的时候报错 Database Query Error

由 xingyu 发布

解决方案

前面发布文章的时候,辛辛苦苦写了一堆,激动的心,颤抖的手,在点击发布文章的时候,啪~~崩了,直接报错"Database Query Error",吓得我赶紧回退,把刚写的文章复制出来,可太刺激了。

然后开始各种百度寻找解决办法, 结果试了一个方案直接我的网站都打不开了,这,,,,,赶紧改回去,最后,在一位大佬的博客地下看到了解决方案。

原因呢主要是:Typecho 默认是不支持 Emoji 表情的,当你评论中有 Emoji 的话,就会报这个错误。这个是因为编码的问题造成的。Mysql 默认使用的是 utf8 字符集,utf8 字符集的编码范围 u0000-uFFFF,而 Emoji 是在 Unicode 位于 u1F601-u1F64F 区段的字符。所以评论中带有 Emoji 表情才会报错。

然后仔细一想,的确我的文章中前面手欠加了表情=.= 赶紧把那几个表情删了,然后Duang 的一下就好了,虚惊一场。

不过我可不想就这么完事了,哪能没有表情,哪能就这么妥协,直接开干

我们只需要修改 Mysql 中评论字段的字符集编码为 utf8mb4 即可。评论字段是对应的博客数据库中 typecho_comments 表中的 text 字段,我们可以使用数据库工具,把该字段的编码修改为 utf8mb4_general_ci。也可以用下面命令行来修改。

# 首先进入你的博客使用的数据库
use typecho;
# 然后修改 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 服务,问题就解决了。

友情提示,请提前备份好数据库,当然,你如果想重建的话,当我没说。
还有,就是没有什么基础的不建议搞,不然,蹦砂卡拉卡~~~~

摘自:https://www.jianshu.com/p/f05c14045d41


暂无评论

发表评论