在写下这篇文章之前,请允许我先发几个表情平复一下心情
😞😠😡😭😳😨🔑🚬😏😄😎
花心思写了一篇长文,结果发布之后文章只显示一句话,后面内容全部丢失!一点一点排查,发现是emoji表情造成的,从表情之后,所有内容全部不显示!FUCK,这是什么梗,使出看家本领(百度一下,你就知道)才找到原因,原来是数据库编码格式不兼容的问题。为了杜绝以后出现类似情况赶紧修复,并记录如下。
Typecho默认不支持emoji表情是由于编码的问题,只需要将默认的数据库编码utf8修改为utf8mb4即可,不过utf8mb4编码在PHP5.5以后才支持。
Emoji是一种在Unicode位于u1F601-u1F64F区段的字符。这个显然超过了目前常用的UTF-8字符集的编码范围u0000-uFFFF。在MySQL中,UTF-8只支持最多3个字节,而emoji是4个字节。这就导致如果你不修改数据库的话,typecho是无法支持Emoji表情的。
当然好消息是utf8mb4其实是完全兼容utf-8,修改后不会影响现有数据及后期数据。
1.修改数据库编码
在PhpMyadmin中选择typecho数据库,操作-->排序规则-->选择utf8mb4_unicode_ci然后执行。
2.修改表编码
执行以下sql语句
alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;
3.修改typecho配置文件
在网站根目录找到config.inc.php
拉到最下面找到这一行
'charset' => 'utf8',
修改为
'charset' => 'utf8mb4',
再打开网站就可以支持emoji了,emoji表情还是相当丰富的.
---The END---