Wave Spread...

修复 Typecho 文章中包含表情就数据库报错问题

分类:Linux 评论: 0

迁移博客后发现修改文章就会报错,报错信息如下:

database query error

查找很多资料后也没有解决,偶然发现若是去掉内容中的 Emoji 表情即可成功提交,加入表情就会报错。

打开 Typecho 的调试模式:(在config.inc.php里加入)

define('__TYPECHO_DEBUG__', true);

然后查看日志即可发现大量报错:

Incorrect string value: '\xF0\x9F\x91\x8F\x0D\x0A...' for column 'text' at row 1

先进入数据库:

[root@domain ~]# mysql -uroot -p

在数据库中查看数据库编码:

show databases;
use typecho;
show variables like '%char%';

查询资料后发现 utf-8 并不支持 Emoji

要支持 Emoji 表情,需使用 utf8mb4 编码来支持,utf8mb4utf-8 的补充集,完全兼容 utf-8,无需担心兼容问题。

使用以下命令修改数据库编码(需先切换至对应的数据库):

alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_general_ci;

然后修改 Typecho 的数据库设置即可。

[root@domain ~]# vim config.inc.php

'charset' => 'utf8' 替换为 'charset' => 'utf8mb4' 即可。


参考链接

回复