
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编码体式格局的细致内容,更多请关注ki4网别的相干文章!