天下网吧 >> 网吧天地 >> 天下码农 >> 数据库 >> 正文

MySQL不能存储emoji表情解决方法(已经设置为UTF-8编码了)

2021-5-22天下码农程序猿

出现这个问题主要还是MySQL编码的问题。

首先要知道,MySQL的UTF-8格式分为N种,有UTF-8,UTF-16,UTF-8又分为基础utf8,utf8mb3,utf8mb4,其中utf8mb4才是4个字节的支持emoji表情的正确编码格式。

所以解决方案

旧表升级

你需要把表和字段进行编码转换,执行下面代码(注意修改里面的表名和字段名):

ALTER TABLE t1
  DEFAULT CHARACTER SET utf8mb4,
  MODIFY col1 CHAR(10)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  MODIFY col2 CHAR(10)
    CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;

这样能够无错的把旧表转换成支持emoji表情的utf8mb4编码

新表:

建数据库,建表时记得选择格式为utf8mb4格式即可。

为什么会这样:

这里顺带说下为什么utf8mb4才可以保存emoji表情和其他生僻字的原因:

utf8mb4为一个4字节字符存储方式,emoji表情是需要4个字节以上保存空间的,因为他的编码值范围比较大。3个字节无法保存。而默认的utf8和utf8mb3都是3字节的存储空间,所以他们虽然为utf8格式,但是并不能正常保存emoji表情。

对于MySQL各种编码的具体说明可以参考下表:

官方文档介绍:

https://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html

本文来源:天下码农 作者:程序猿

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行