专注于云服务器
VPS主机优惠测评
国内免备案虚拟主机

为什么不要在MySQL中使用UTF-8编码方式

为什么不要在MySQL中使用UTF-8编码方式

 

 

MySQL的UTF-8编码方式

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

问题复现

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

为什么不要在MySQL中使用UTF-8编码方式

往数据库存一条记录:

@Test public void testInsert() {     User user = new User();     user.setUsername("uD83DuDE00 ");     user.setPassword("123456");     userRepo.save(user); }

这里只是部分代码,看不懂没关系,这里是给user表插入一条记录。其中username是uD83DuDE00 。

其实uD83DuDE00是一个emoji表情。

为什么不要在MySQL中使用UTF-8编码方式

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

为什么不要在MySQL中使用UTF-8编码方式

与预期一致,报错了。

解决问题

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

总结

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

更多MySQL相关技术文章,请访问MySQL教程栏目进行学习!

以上就是为什么不要在MySQL中使用UTF-8编码方式的详细内容,更多请关注名铺123其它相关文章!

赞(0) 打赏
转载请注明出处:晓波笔记 » 为什么不要在MySQL中使用UTF-8编码方式
分享到: 更多 (0)
megalayer云服务器

raksmart云服务器

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

晓波笔记-VPS主机,云服务器优惠促销测评

QQ:87304394

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏