让Typecho支持emoji表情设置
- 很多人写文章时都喜欢使用emoji表情(比如🎉🧸🎄这些图标)但是typecho的数据库类型默认不支持emoji编码(开发版在安装的时候已经支持选择utf8mb4了),因为Emoji是一种在Unicode位于u1F601-u1F64F区段的字符。这个显然超过了目前常用的UTF-8字符集的编码范围u0000-uFFFF。
- 在MySQL中,UTF-8只支持最多3个字节,而emoji是4个字节。所以如果你不修改数据库的话,typecho是无法支持Emoji表情的。
- 当然好消息是utf8mb4其实是完全兼容utf-8,修改后,不会影响现有数据及后期的数据。
- 要注意的是utf8mb4编码在PHP5.5以后才支持,所以请确保你的PHP版本在5.5以上,typecho程序推荐PHP5.6版本。
数据库编码修改
进入PhpMyadmin,选择对应的数据库,选择操作——排序规则——选择utf8mb4_unicode_ci
并执行。
数据库表编码修改
选择SQL-复制下面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;
如果有别的表,比如友情链接插件,它就会创建一个 links 表,这里的话也是建议一起改了。
另外,如果安装时改过前缀,也只需对以上语句做相应修改。
配置网站
最后在网站根目录config.inc.php
配置文件中找到以下代码:
'charset' => 'utf8',
将utf8
修改为utf8mb4
延伸阅读
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等(utf8的缺点)。
12 条评论
感谢分享
我评论里的表情有问题 不知道是不是因为这个 主题自带表情没事 新加表情预览可看 发出评论就会被拦截需要审核 然后通过后会显示表情备注
这必须整起。
数据库我动过 ,也翻车过,哎,现在养老了,不弄这些了
该折腾时还是要折腾~
别的都敢随便折腾,唯独数据库不敢碰~~~
有备份无所畏惧
tp有这类插件,安装后自动执行数据库操作,再卸载就OK了
自己动手不更有仪式感吗 OωO
你要是早点写这篇,我当初也不要又是百度又是群里找大佬的...
你弄完了写一篇,我也不要水这篇了
你说的好像很有道理,但是我还是要反驳你