为何不要在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编码方式
往数据库存一笔记录:
@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吧。
更多MySQL相关技术文章,请拜访MySQL教程栏目停止学习!
以上就是为什么不要在MySQL中使用UTF-8编码方式的具体内容,更多请关注百分百源码网其它相关文章!