【搞事情】由Emoji引发的Typecho数据库报错

@Xiaoluo  October 23, 2020

刚刚我在写了一篇文章,然后刚想上传时,网站给我报了个
Database Query Error
的错误。
这啥,我的文章还没保存,就直接报错了,然后果断点下了后退,顺利将没有保存的文章复制了出来。本以为是网站防火墙的问题,结果发现,不是,这个就奇怪了。。。。

通过分析,发现问题所在:只要文章里有Emoji,就会在上传时报错,将Emoji删除,问题消失。于是将问题定位在了Emoji上。
这都0202年了,Emoji都不能有?然后就通过搜素引擎,发现其他朋友的博客也曾经存在这种情况。

为什么会出现这样的情况呢?

1、刚才的操作是发布了Emoji表情,emoji 是 4 个字节;

2、Typecho的数据库选用了 UTF-8 的编码,在 MySQL 中,UTF-8 只支持最多 3 个字节;

因此,需要对数据库进行修改。
修改数据库 charset 为 utfmd4:

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 配置文件 config.inc.php 中数据库定义参数的charset进行修改:

'charset' => 'utf8mb4',

进行测试,OK了 ???

参考:
https://www.lanka.cn/Typecho-6_3759.html
https://iao.su/2892/


这里不能写小纸条呢~