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

2023-09-18 08:51:48

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

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

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

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

<dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <scope>runtime</scope>
</dependency>

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

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

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

        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,查看字段字符集命令如下

SHOW FULL COLUMNS FROM table_name;

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

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

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

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

更多推荐

使用NRM管理Node镜像源,提升包下载速度

前言在日常开发中,我们经常会使用到Node.js来构建和运行JavaScript应用程序。然而,在使用Node.js时,由于网络环境的限制,我们可能会遇到包下载速度缓慢的问题。为了解决这个问题,本文将介绍如何使用NRM(NodeRegistryManager)来管理Node镜像源,从而提升包下载速度。什么是NRM?NR

JavaScript前端跨页面通信:实现页面间的数据传递与交互

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录引言1.前端跨页面通信的概述2.前端跨页面通信的属性2.1双向通信2.2异步通信2.3安全性2.4可靠性3.前端跨页面通信的应用场景3.1多标签页间的数据共享3.2页面间的消息通知和事件触发3.3页面间的数据传

如何在Python爬虫程序中使用HTTP代理?

在进行网络爬虫时,我们经常需要使用代理服务器来隐藏自己的真实IP地址,以避免被目标网站封禁或限制访问。本文将介绍如何将HTTP代理配置到Python爬虫程序中使用。什么是HTTP代理?HTTP代理是一种网络代理,它充当客户端和服务器之间的中介,接收客户端请求并将其转发给服务器。代理服务器可以隐藏客户端的真实IP地址,使

day19正则表达式

今日内容正则表达式教学目标能够理解正则表达式的作用能够使用正则表达式的字符类能够使用正则表达式的逻辑运算符能够使用正则表达式的预定义字符类能够使用正则表达式的限定符能够使用正则表达式的分组能够在String的split方法中使用正则表达式正则表达式1.1正则表达式的概念及演示在Java中,我们经常需要验证一些字符串,例

【Flutter】2023 Google 开发者大会给 Fluter 带来了什么

文章目录一、2023年谷歌开发者大会概览二、Flutter年度进展三、Dart年度进展四、Material3年度进展五、推荐使用Flutter跨平台开发六、参考资料一、2023年谷歌开发者大会概览你知道吗,今年的谷歌开发者大会真是令人期待。从5月10日的线上GoogleI/O大会开始,到9月6日至7日在上海世博中心的现

2023年华为杯研究生数学建模竞赛辅导

2023年华为杯研究生数学建模竞赛辅导各研究生培养单位:中国研究生数学建模竞赛作为教育部学位管理与研究生教育司指导,中国学位与研究生教育学会、中国科协青少年科技中心主办的“中国研究生创新实践系列大赛”主题赛事之一,是一项面向在校研究生进行数学建模应用研究与实践的学术竞赛活动,是广大在校研究生提高建立数学模型和运用互联网

Linux多线程【线程控制】

✨个人主页:北海🎉所属专栏:Linux学习之旅🎃操作环境:CentOS7.6阿里云远程服务器文章目录🌇前言🏙️正文1、线程知识补充1.2、线程私有资源1.3、线程共享资源1.4、原生线程库2、线程控制接口2.1、线程创建2.1.1、一批线程2.2、线程等待2.3、线程终止2.4、线程实战2.5、其他接口2.5.

Flutter动态化开发之Fair实战

一、背景目前移动端应用的版本更新,最常见的方式是定期发版,无论是安卓还是iOS,都需要提交新的安装包到应用市场进行审核。审核通过后,用户在应用市场进行App的下载更新。而动态化,就是不依赖更新程序安装包,就能动态实时更新页面的技术。相比动态化技术,定期发版更新应用的方式存在一些问题,比如:审核周期长,且可能审核不通过。

【完全二叉树魔法:顺序结构实现堆的奇象】

本章重点二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题1.二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是

PostgreSQL缓存管理

缓冲区管理器、存储和后端进程之间的关系缓存管理结构PostgreSQL缓冲区管理器由buffertable、bufferdescriptors和bufferpool组成。bufferpool层存储表和索引等数据文件页,以及空闲空间映射和可见性映射。bufferpool是一个数组,每个槽存储数据文件的一个页面。缓冲池数组

No suitable driver found for jdbc:mysql://localhost:3306/BookManagement

目录问题背景解决办法问题背景今天遇见一个这个报错,解决后将解决方案分享一下:报错内容如下:“"C:\ProgramFiles\Java\jdk1.8.0_221\bin\java.exe""-javaagent:D:\IDEA2020_1\IntelliJIDEA2020.1\lib\idea_rt.jar=51910

热文推荐