一个关于MySQL指定编码实现的小坑
2024-08-29 00:37:32
写在前面
环境: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 。
最新文章
- iOS----集成ijkplayer视频直播
- Java基本语法练习
- [ACM] 1007 -球球方格
- [Linux 性能检测工具]DF
- 【C语言入门教程】4.2 二维数组
- hashmap和hashtable,arraylist和vector的区别
- 基于MapReduce的关系代数运算(2)
- pyqt listwidget下面创建多张图片
- 为什么php时间阅读RTF,p标签会出现红色
- POI导出Excel文档通用工具方法
- 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)
- IT研发工程师职业规划
- Linux ";ls -l";文件列表权限详解 【转】
- asp.net网页注释
- python安装scrapy等库需要c++ 14.0 下载链接放这里
- python中的zip、map、reduce 、lambda函数的使用。
- 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)
- springbatch入门练习(第一篇)
- apk反编译看包名什么的
- boot sector FAT
热门文章
- Flink中的算子操作
- Python中的变量以及变量的命名
- 前缀和的n个神奇操作
- [考试总结]noip模拟39
- Python - repr()、str() 的区别
- Appium问题解决方案(3)- java.lang.IllegalStateException: UiAutomation not connected!
- openswan协商流程之(四):main_inI2_outR2()
- .net Core 基于EF Core 实现数据库上下文
- Sonarqube C# 配置资料整理
- String底层使用是char数组还是byte数组