修复 Typecho 文章中包含 Emoji 数据库报错问题

后知后觉 暂无评论

迁移博客后发现修改文章就会报错,摸不到头脑

I

具体报错信息如下

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,无需担心兼容问题。

II

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

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 的数据库设置即可。

vim config.inc.php

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


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
回复
回答41+37=