首先,看到这个问题大致推测应该是字符编码的原因。
查了下资料,了解到UTF-8编码有可能是两个、三个、四个字节,而emoji或者某些特殊符号则占用四个字节。
mysql中的utf-8编码最多存储却为三个字节。
所以导致了该异常:
java.sql.SQLException: Incorrect string value: '\xE6\x98\x88\xE8\xAE\xA152' for column
大概mysql的utf8编码最大存储3个字节是为了节省空间吧,这里还没有做考证。
了解到mysql中提供了存储4个字节的utf8编码格式:utf8mb4,所以问题可以降级为修改数据库一类的编码即可。
1、数据库的编码修改为utf8mb4:
ALTER DATABASE cynthia CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2、修改一些数据库相关配置,默认连接设置为utf8mb4:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
这时候重启下数据库,问题即可解决。