Loading... ## 前言 大家在typecho博客写文章时,很多人都喜欢使用<span style='color:#00BFFF'>emoji</span>表情(比如😀、🤦、🎉这些图标)但是typecho的数据库类型默认不支持emoji编码,因为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版本。 下面开始带大家一步步的设置。 ## 开始修改 修改数据的编码格式为:`utf8mb4`,排序规则设定为:`utf8mb4_unicode_ci` ```sql ALTER DATABASE `typecho` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; ``` 修改成功后,还需要修改表的编码格式: ```sql --语法解释 [如有新加的表,请更换下方对应内容] ALTER TABLE `数据名称`.`表名称` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' --如果都是默认配置,可以直接执行下方代码 ALTER TABLE `typecho`.`typecho_comments` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_contents` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_fields` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_metas` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_options` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_relationships` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ALTER TABLE `typecho`.`typecho_users` CONVERT TO CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci' ``` <div class="tip inlineBlock warning simple"> 如果数据库中还创建了其他的表,还需要将其他新建的表一同修改。 数据库名称如果也发生了变更,这里也需要修改成对应数据名称。 </div> ## 配置网站 修改了数据的编码格式之后,还需要进入服务器,找到网站根目录,找到"`config.inc.php`"文件,打开该文件,修改默认的编码格式。 ```php /** 定义数据库参数 */ $db = new Typecho_Db('Mysql', 'typecho_'); $db->addServer(array ( 'host' => '***', 'user' => '***', 'password' => '***', 'charset' => 'utf8mb4', //🚩修改此处 [将默认的编码字符修改为:utfmb4] 'port' => '***', 'database' => 'typecho', ), Typecho_Db::READ | Typecho_Db::WRITE); Typecho_Db::set($db); ``` 修改上述文件之后,再去测试一下,你就会发现现在的博客已经支持emoji表情了。 --- 有任何疑问,记得评论告诉我~ 最后修改:2021 年 12 月 30 日 © 允许规范转载 赞 3 都滑到这里了,不点赞再走!?