Mysql JDBC支持utf8mb4编码

项目中需要在mysql中存储包含emoji表情的字段,使用utf8编码无法解决,因为mysql的utf8实现只有3字节。

为此mysql在5.3+后加入了utf8mb4支持,完全兼容utf8。utf8mb4最多可用4字节存储一个字符,这样就可以处理emoji表情,注意mysql服务端的版本要求utf8mb4的最低mysql版本支持版本为5.5.3+

后来参考了另一篇文章MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码),将表的编码改为utf8mb4,将mysql url连接串里characterEncoding=UTF-8去掉,改为jdbc:mysql://ali-burst:3306/liebian?serverTimezone=Asia/Shanghai&useUnicode=true

这样数据是插入了,没有报错,但是确是乱码。花了好长时间研究,说是在客户端连接池中设置spring.datasource.init-sql之类的,试了好多,没用。

尝试在mysql命令行客户端手动插入emoji

set names utf8mb4;
insert into test values('��a汉��');
select * from test;

表情成功插入,说明mysql服务端是没问题的
那肯定是应用程序的问题了

排查了好久,上面那个链接仔细看了好几遍,突然注意到版本问题。可能不仅要求服务端要在5.5.3以上,对JDBC驱动也有版本要求。检查pom里mysql驱动版本,5.1.6,真TM坑。
mysql java驱动版本改为5.1.41后,成功插入,无乱码

猜你喜欢

转载自blog.csdn.net/heroloveyou/article/details/82290114