SpringBoot+MyBatisPlus+MySQL不能储存(保存)emoji表情问题解决

1.之前在学习过程中不知道utf8和utf8mb4的区别,也没过多去了解,直到最近设置的数据库编码全是utf8后发现问题所在了,居然不能储存表情包!!!整个人直接傻了,后面知道了utf8是3字节不能储存表情,utf8mb4才可以,废话不多说马上整改,接下来的一幕就令人头疼了。

2.我的mysql版本是5.7.40,首先按照一些文章的教程修改数据库的编码为utf8mb4(备注:使用的是SQLyog工具)

然后继续修改表的字符集格式为utf8mb4(备注:如果没有使用工具的建议去查一下修改数据库和表字符的字符集命令)

然后我的pom.xml的MySQL依赖包如下

XML 复制代码
<dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <scope>runtime</scope>
</dependency>

然后yml文件数据库连接如下

XML 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mcy_wechat_data?useSSL=false&severTimezone=GMT%2b8
    username: name
    password: password

好了,我以为这样就好了,结果还是报错了,如下

bash 复制代码
        Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)

心态再次崩,一直找了很多文章在修复,后来自己发现,数据库和表虽然改了字符集,那么字段(列属性)呢?果不其然,一查发现字段的字符集还是utf8,查看字段字符集命令如下

sql 复制代码
SHOW FULL COLUMNS FROM table_name;

这一波我真的无语了,改了表的字符集,字段居然没有跟着改,这里用命令更改,如下

sql 复制代码
ALTER TABLE 表名 MODIFY 字段名 类型(如varchar(255)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

改后再查如下,我这里其他的是utf8,content是utf8mb4

果不其然,就没报错了,愉快的储存表情包了,如下,我的content把表情包已字符串形式给数据库了

相关推荐
田超凡1 小时前
深入理解MySQL_6 Temporary临时表
mysql·java-ee
源码宝1 小时前
云HIS二次开发实施路径指南
后端·源码·二次开发·saas·云his·医院信息系统
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-DDD(领域驱动设计)核心概念及落地架构全总结(含事件驱动协同逻辑)
java·人工智能·spring boot·微服务·架构·事件驱动·领域驱动
尽兴-2 小时前
MySQL 8.0主从复制原理与实战深度解析
数据库·mysql·主从复制
小北方城市网2 小时前
SpringBoot 集成 RabbitMQ 实战(消息队列解耦与削峰):实现高可靠异步通信
java·spring boot·python·微服务·rabbitmq·java-rabbitmq·数据库架构
程序员老徐2 小时前
SpringBoot嵌入Tomcat注册Servlet、Filter流程
spring boot·servlet·tomcat
guslegend2 小时前
第1章:快速入门SpringBoot
spring boot
YongCheng_Liang3 小时前
MySQL 高级特性深度解析:从索引优化到高可用架构
运维·数据库·mysql
<花开花落>3 小时前
MySQL 数据备份流程化
mysql·systemd
Coder_Boy_3 小时前
基于SpringAI的在线考试系统-考试模块前端页面交互设计及优化
java·数据库·人工智能·spring boot