问题背景:非常见中文汉字存入mysql库
报错信息:Cause: java.sql.SQLException: Incorrect string value: "xF0xA8xB3x92x0Ap..." for column "request" at row 1
pom信息如下:
com.alibaba druid 1.1.12 mysql mysql-connector-java 5.1.37
问题很明显,因为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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72035.html
摘要:中无法存储字符,源自于之前编码只支持最大个字节,而需要个字节。事实上,如果只是某个列存在字符的存储问题,那就只需要修改这个列的编码类型即可。这涉及到应用与建立连接的问题。有一条命令是,会将的编码统一设置。使用这条命令便可以达到我们的目的。 MySQL中无法存储Emoji字符,源自于MySQL 5.5之前utf8编码只支持最大3个字节,而Emoji需要4个字节。从MySQL 5.5开始,...
摘要:常见问题解决编译错误问题日志编译错误编译提示等日志错误解决检查是否安装插件安装安装运行错误问题错误不能连接解决检查服务是否启动检查地址和端口号未知数据库解决检查是否新建数据库默认的数据库为,可在不同环境的配置文件中更改例如中 spring-boot-plus 常见问题解决 FAQ 编译错误问题 log日志编译错误 编译提示log.info等日志错误 解决 检查是否安装lombok插件...
阅读 739·2021-09-26 09:55
阅读 1989·2021-09-22 15:44
阅读 1437·2019-08-30 15:54
阅读 1296·2019-08-30 15:54
阅读 2619·2019-08-29 16:57
阅读 472·2019-08-29 16:26
阅读 2460·2019-08-29 15:38
阅读 2099·2019-08-26 11:48