Spring-Boot+Druid连接Mysql兼容utf8mb4
问题背景:非常见中文汉字存入mysql库
报错信息:Cause: java.sql.SQLException: Incorrect string value: 'xF0xA8xB3x92x0Ap...' for column 'request' at row 1
pom信息如下:
<!-- 数据源 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <!-- 数据源 end -->
问题很明显,因为mysql库一般都是utf-8的字符集,只支持3字节的中文汉字,而特殊的中文汉字是用四字节存储的,所以首先要把你的数据库表的格式设置正确,修改语句如下:
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 你的表名 CHANGE 字段名 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改完成后,我们就可以处理代码层面的问题了,
=============画重点,敲黑板!!!==============
我们需要在初始化druid数据源时,添加下面的配置,以保证连接mysql时,客户端的字符集被指定为utf8mb4
public DataSource getDataSource() throws Exception { Properties props = new Properties(); props.put("driverClassName", "com.mysql.jdbc.Driver"); props.put("url", "你的jdbc连接串"); props.put("username", "你的用户名"); props.put("password", "你的密码"); props.put("initConnectionSqls", "set names utf8mb4;"); return DruidDataSourceFactory.createDataSource(props); }
initConnectionSqls这个配置项一定要写对,网上很多的教程写的都是connectionInitSqls,在比较新的druid版本是不认这个参数的,具体原因可以参加下方源码的截图。
参考文献:
他山之石1
他山之石2
相关推荐
emmm00 2020-11-17
王艺强 2020-11-17
aydh 2020-11-12
世樹 2020-11-11
zry 2020-11-11
URML 2020-11-11
spurity 2020-11-10
yifangs 2020-10-13
Andrea0 2020-09-18
Ida 2020-09-16
ltd00 2020-09-12
tufeiax 2020-09-03
xjd0 2020-09-10
greatboylc 2020-09-10
adsadadaddadasda 2020-09-08
疯狂老司机 2020-09-08
CoderToy 2020-11-16
ribavnu 2020-11-16
bianruifeng 2020-11-16