写在前面

环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8

场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了

那么为什么会失败呢?

贴上报错日志

Incorrect string value: '\xF0\x9F\x98\x98\xF0\x9F...' for column 'nickname' at row 1

是因为失败的用户微信昵称中带有emoji符号导致的

剖析:

MySQL支持多种字符编码集,如UTF-8、GB2312、GBK等

可以通过 SHOW CHARSET 命令查看。

通常我们会建议使用 UTF-8 作为默认的字符编码方式。

从上图我们可以看到,MySQL数据库有两套 UTF-8 编码实现。

  • utf8:utf8 编码只支持三个字节以内。在 utf8 编码中,中文是占了3个字节,其他的英文、数字、符号都是占1个字节。但是emoji符号占4个字节,一些比较复杂的文字、繁体字也是占4个字节。
  • utf8mb4:UTF-8编码的完整实现。最多可支持4个字节,所以,可以用来存储emoji符号。

查阅资料,官方解释:

最后

Tips:如果有需要保存emoji符号的字段,记得一定要指定编码为 utf8mb4 。

最新文章

  1. iOS----集成ijkplayer视频直播
  2. Java基本语法练习
  3. [ACM] 1007 -球球方格
  4. [Linux 性能检测工具]DF
  5. 【C语言入门教程】4.2 二维数组
  6. hashmap和hashtable,arraylist和vector的区别
  7. 基于MapReduce的关系代数运算(2)
  8. pyqt listwidget下面创建多张图片
  9. 为什么php时间阅读RTF,p标签会出现红色
  10. POI导出Excel文档通用工具方法
  11. 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)
  12. IT研发工程师职业规划
  13. Linux "ls -l"文件列表权限详解 【转】
  14. asp.net网页注释
  15. python安装scrapy等库需要c++ 14.0 下载链接放这里
  16. python中的zip、map、reduce 、lambda函数的使用。
  17. 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)
  18. springbatch入门练习(第一篇)
  19. apk反编译看包名什么的
  20. boot sector FAT

热门文章

  1. Flink中的算子操作
  2. Python中的变量以及变量的命名
  3. 前缀和的n个神奇操作
  4. [考试总结]noip模拟39
  5. Python - repr()、str() 的区别
  6. Appium问题解决方案(3)- java.lang.IllegalStateException: UiAutomation not connected!
  7. openswan协商流程之(四):main_inI2_outR2()
  8. .net Core 基于EF Core 实现数据库上下文
  9. Sonarqube C# 配置资料整理
  10. String底层使用是char数组还是byte数组