掉坑回顾:

最近在工作中遇到一个BUG,用于记录客户昵称的数据表,在插入带有表情的字符时候报错.使用的存储引擎是INNODB,当我查看数据库字段的时候确实是设置的utf8,我传入的字符也是utf8的编码集,这有什么错?直到我深入了解才发自己使用的姿势并不对,mysql数据库中的"utf8"并不是真正的utf8编码,关于这个问题mysql官方一直未能修复,取而代之的推出了utf8mb4,这一点让我记忆犹新,切记mysql中不要再使用utf8编码!

1.BUG重现

这里我做了一个简单的试验,来验证utf8在mysql中存在的问题:

建立数据表:

CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`nickname` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '昵称',
`sex` varchar(255) DEFAULT NULL COMMENT '性别',
`age` int(10) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='测试utf8问题重现'

这里我们直接指定了nickname字段的字符编码为utf8,然后我向里面插入一条普通数据,使用mybatis的插入数据库语句如下:

INSERT INTO  `user` ( `nickname`, `sex`, `age`) VALUES ( '张三', '男', '18');

的确是像我们平时操作一样插入成功了,似乎没有什么问题,但这里我们再测试一下昵称中带有表情符(emoji)的数据尝试一下:

张三 An

最新文章

  1. CSS 属性设置优先级问题
  2. [Everyday Mathematics]20150225
  3. CSS制作一个简单网页的下拉导航栏
  4. 网站TCP链接暴增
  5. yum puppet
  6. wndows 7 Wifi热点
  7. Mobile上的viewport及各种概念澄清贴
  8. multimap 和 multiset 类型
  9. Your data vis “Spidey-sense” & the need for a robust “utility belt”
  10. java中的数组二分法
  11. 记MVC学习过程中一次传参到View时遇到的错误
  12. python csv与字典操作
  13. h5 js判断是安卓还是ios设备,跳转到对应的下载地址
  14. 【MOOC EXP】Linux内核分析实验四报告
  15. c# 移除文本文件里的某一行
  16. 如何写好PPT
  17. TClientDataSet 的Filename 和 open方法
  18. 迷你MVVM框架 avalonjs 学习教程17、avalon的一些配置项
  19. supervisor配置环境变量(PATH)
  20. Srv数据格式

热门文章

  1. 配置以https访问网站
  2. 解决Mac下SourceTree每次都让输入密码的问题
  3. 逆向破解之160个CrackMe —— 027
  4. AcWing 38. 二叉树的镜像
  5. 神经网络中Batch Size的理解
  6. DS18B20温度获取
  7. ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)
  8. [东西]EquationCalcular
  9. Set学习笔记
  10. 【JZOJ5739】【20190706】毒奶