因为要存Emoji 表情
然后遇见问题java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8B' for column 'a' at row 1
查询资料之后发现mysql utf8其实是3个字节,所以要使用utf8mb4.具体详情自行百度
说说这个项目使用的springboot2.2,jpa没有指定使用连接池
重点来了
在各种百度谷歌找api之后答案都是springboot 默认使用连接池为tomcat jdbc,
想使用utf8mb4
1.设置数据库、表、字段的编码类型为utf8mb4
2.在创建数据库连接之后,要执行一条sql语句“SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci”,这样的数据库连接才可以操作utf8mb4类型的数据的存取。
在配置数据库连接池的配置上,根据使用的连接池的不同,配置参数也不相同,下面给出springboot使用默认的tomcat连接池的时候,支持utf8mb4的配置。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://*.*.*.*:3306/dbname?useUnicode=true&characterEncoding=utf-8
username: username
password: password
tomcat:
initSQL: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
但是
上面的是springboot1.x 的信息
在2.x里面 默认的连接池是 HikariCP
我们去GitHub看文档https://github.com/brettwooldridge/HikariCP
connectionInitSql
This property sets a SQL statement that will be executed after every new connection creation before adding it to the pool. If this SQL is not valid or throws an exception, it will be treated as a connection failure and the standard retry logic will be followed. Default: none
连建池创建的时候默认执行语句是connectionInitSql参数
那么配置的话就是
spring.datasource.hikari.connectionInitSql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci