hibernate mysql utf8mb4_spring-boot jpa mysql emoji utfmb4 异常处理

spring-boot jpa mysql utf8mb4

emoji 写入失败 mysql database,table,column 默认为utf8mb4

Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xAD' for column 'title' at row 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)

at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)

at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)

at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)

at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)

at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)

at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)

... 68 more

早期和spring-boot 1.4不会有这个问题

新服务应用spring-cloud 配spring-boot 就出错,网上各种方案都试了,都不生效。

基本思路都是在配置文件中设置connectionInitSql

spring-boot2.0.0.RC2

mysql 5.7.14

mysql

mysql-connector-java

org.springframework.boot

spring-boot-starter-data-jpa

代码环境

spring-boot 2.0.0.RC2

多次尝试失败后,隐约有一个思路

这些办法有些是和spring-boot jpa有区别,虽然都是基于 jdbc hibernate的,但spring-boot jpa,可能会些区别。

在原文的环境是这些配置可能是生效的,但是在我的spring-boot jpa上不起作用

网上见的,都是对hibernate有效的方案(假设有效),但不适用spring-boot jpa

spring-boot的环境比较复杂,具体哪一步出问题

得到源码里查了,开玩笑的,这工作量就大了

这种问题有两种思路,看源码是正向的思路

最实际的办法是反向来看,反向看

异常里有hikari.pool,这是个以前没见过的sql连接池

https://stackoverflow.com/questions/23172643/how-to-set-up-datasource-with-spring-for-hikaricp

http://www.cnblogs.com/yjmyzz/p/mysql-utf8mb4-jdbc.html

试了试

spring.datasource.hikari.connectionInitSql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

问题解决

应该是这个连接池的哪个环节出问题了,本来应该加载spring-boot 配置参数的datasource实始化的,但这里是不生效。

单独指定datasource的实始化,才能解决问题

也许换个连接池也会解决这个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值