今天在进行文章回复评论的时候,看到手机输入法有个表情功能,就发了几个表情进行提交,在提交后系统出现了「Database Query Error」报错,叔可忍婶不可忍,都移动互联网时代了,不能因为emoji 表情符号出现报错,既然报错就试着解决吧。
解决过程
1、刚才的操作是发布了Emoji表情,emoji 是 4 个字节;
2、Typecho的数据库选用了 UTF-8 的编码,在 MySQL 中,UTF-8 只支持最多 3 个字节;
3、修改数据库 charset 为 utfmd4:
4、输入以下运行编码
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;
5、修改 Typecho 配置文件 config.inc.php 中数据库定义参数中的 charset 为 utf8mb4
'charset' => 'utf8mb4',
6、进行测试后,OK了。
延伸知识
1、MySQL在5.5.3之后增加了这个utf8mb4的编码,所以最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本;
2、mb4就是most bytes 4的意思,可以用来兼容四字节的unicode,存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。如果你要存互联网emoji表情,就需要utf8mb4,而不是utf-8;
3、utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换;
4、MySQL数据库的 “utf8”并不是真正概念里的 UTF-8,MySQL中的“utf8”编码只支持最大3字节每字符。真正的大家正在使用的UTF-8编码是应该能支持4字节每个字符,MySQL的开发者没有修复这个bug。他们在2010年增加了一个变通的方法:一个新的字符集“utf8mb4”,他们并没有对外公布(可能因为这个bug有点尴尬)。现在很多指南推荐用户使用“utf8”其实都错了;
5、建议MySQL和MariaDB用户使用“utf8mb4”而不是“utf8”,毕竟现在是不管使用 Anroid 设备,还是 iOS 设备,如果插入包含有 emoji 表情符号的记录时就报错,还是很尴尬的;
6、最重要一点,对数据库操作前,记得备份数据。
问题解决了!感谢博主!!
客气啦