MySQL的UTF-8编码方式

MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 标准(RFC 3629)是在此之后规定的。正因此,才造就了MySQL中的UTF-8与我们日常开发中的UTF-8不一致,从到导致了些问题。MySQL的UTF-8只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。

问题复现

有数据库表如下:utf8编码方式

往数据库存一条记录:

@Testpublic void testInsert() { User user = new User(); user.setUsername("\uD83D\uDE00 "); user.setPassword("123456"); userRepo.save(user);}

其实\uD83D\uDE00是一个emoji表情。

因为MySQL中utf8字符集只支持三字节UTF-8编码的Unicode范围,而emoji字符属于四字节编码部分,所以程序运行预期是会报错的。运行这段代码:

与预期一致,报错了。

解决问题

虽然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方却没有修复此bug,而是通过2010年重新发布的“utf8mb4”来支持真正的 UTF-8。因此想要解决此问题,只能够将MySQL数据库设置为utf8mb4字符集才行。

总结

这个问题,也是因为某次保存数据的时候保存了一个emoji表情才发现的。其实最早开始用MySQL的时候,就有发现一个utf8mb4了,但是自己却没有却去了解UTF8和UTF8MB4的区别。通过此次教训,以后使用MySQL就老老实实的设置字符集为utf8mb4吧。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Android(安卓)版本兼容 — Android(安卓)6.0 和 7.0后获取Mac地
  3. Android(安卓)- Manifest 文件 详解
  4. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  5. android 创建桌面快捷方式 、插件
  6. android源码下载方式
  7. 创建android逐帧动画的两种方式
  8. Selector、shape详解(一)
  9. 【安卓笔记】android客户端与服务端交互的三种方式

随机推荐

  1. Android安全机制(2) Android Permission权
  2. Android 匿名共享内存Java接口分析
  3. Android 安全机制(1)uid 、 gid 与 pid
  4. 无废话Android之android下junit测试框架
  5. 【雨松MOMO】Android 软件开发与游戏开发
  6. android通过NFC读取卡号
  7. Android帮助文档翻译——开发指南(一)应用
  8. Android调用系统摄像头--使用MediaRecord
  9. Android的Gradle插件
  10. Android Web应用高级编程:移动与嵌入式开