MySQL中不能使用UTF-8编码方式的原因

下面一起来了解下MySQL中不能使用UTF-8编码方式的原因,相信大家看完肯定会受益匪浅,文字在精不在多,希望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("\uD83D\uDE00 ");     user.setPassword("123456");     userRepo.save(user); }

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

其实\uD83D\uDE00是一个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中不能使用UTF-8编码方式的原因这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...