5

修改数据库为utf8mb4编码实现Typecho支持emoji表情

 2 years ago
source link: https://www.huhexian.com/22723.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

修改数据库为utf8mb4编码实现Typecho支持emoji表情

青山 2022-01-1210:41:51评论1588字

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并执行。

修改数据库为utf8mb4编码实现Typecho支持emoji表情

数据库表编码修改

选择SQL-复制下面sql语句代码-点击右下角执行。

注意数据库一定要和网站的数据库对应。

  1. alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  2. alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  3. alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  4. alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  5. alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  6. alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci;
  7. alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;

修改数据库为utf8mb4编码实现Typecho支持emoji表情

如果有别的表,比如友情链接插件,它就会创建一个 links 表,这里的话也是建议一起改了。
另外,如果安装时改过前缀,也只需对以上语句做相应修改。

最后在网站根目录config.inc.php配置文件中找到以下代码:

  1. '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的缺点)。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK