mysql 保存emoji表情报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9

10 篇文章 0 订阅
当SpringBoot+Mybatis+Druid+MySQL项目遇到存储表情符号时的SQLException,可通过检查数据库编码、Java配置和JDBC驱动版本来解决。确保数据库采用utf8mb4编码,修改数据库和表的字符集,并更新`mysql-connector-java`到兼容版本。同时,Java连接数据库配置中添加`initConnectionSqls`以设置字符集。
摘要由CSDN通过智能技术生成

MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A…’的解决方法

前情提要
  • 我的项目架构:
    springboot+mybatis+druid+mysql

  • 如果在网上搜了半天按照网上大神的做法依然发现在自己的项目中不管用,那么我认为应该从以下几点来排查问题了

  • 需要注意的地方:

1.数据库的版本以及数据库的编码是否按照utf8mb4修改,
  • 首先你要保证你的mysql数据库能够存储emjio表情。建议先使用sql语句手动执行一下。
INSERT INTO `db_name`.`table_name` (field_name) VALUES ('🙂') 

  • 如果不能存储查看数据的编码方式(以下是修改完正确的格式)
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

在这里插入图片描述
网上有好多数据库修改编码的方式(这里随便从网上查了一个),这个时候数据库应该可以直接插入

-- 修改数据库字符集:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

-- 修改表的字符集:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改某个字段字符集:
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

注意:mysql低版本的不支持utf8mb4

2.java链接数据库配置文件的修改

initConnectionSqls或者connectionInitSqls配置一定要添加上
具体根据自己读取配置文件的方式去添加

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);
}

比较新的druid版本:initConnectionSqls

旧的版本:connectionInitSqls

这个配置项一定要写对,网上很多的教程写的都是针对自己版本写的

网上好多人说不要在jdbc url中写characterEncoding,我自己的项目如果不写的话,中文插入的时候直接就乱码了,反正可以试试,我反正添加了也没有影响
在这里插入图片描述

3.mysql-connector-java的版本,
  • 看下自己的项目中mysql-connector-java依赖的版本,我就是这个原因卡了半天,之前项目依赖的是5.1.6版本(不能用)的,然后改了配置,不管用,翻看了半天源码没有找到原因,最后改为5.1.47,完美解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值