为何不要在MySQL中使用UTF-8编码方式详解
程序员文章站
2022-10-15 14:57:30
mysql的utf-8编码方式
mysql 从 4.1 版本开始支持 utf-8,也就是 2003 年,然而目前流行的utf-8 标准(rfc 3629)是在此之后规...
mysql的utf-8编码方式
mysql 从 4.1 版本开始支持 utf-8,也就是 2003 年,然而目前流行的utf-8 标准(rfc 3629)是在此之后规定的。正因此,才造就了mysql中的utf-8与我们日常开发中的utf-8不一致,从到导致了些问题。mysql的utf-8只支持每个字符最多三个字节,而真正的 utf-8 是每个字符最多四个字节。
问题复现
有数据库表如下:utf8编码方式
往数据库存一条记录:
@test public void testinsert() { user user = new user(); user.setusername("\ud83d\ude00 "); user.setpassword("123456"); userrepo.save(user); }
这里只是部分代码,看不懂没关系,这里是给user表插入一条记录。其中username是\ud83d\ude00 。
其实\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吧。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。