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


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

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

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

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

    1. <dependency>
    2. <groupId>com.mysqlgroupId>
    3. <artifactId>mysql-connector-jartifactId>
    4. <scope>runtimescope>
    5. dependency>

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

    1. spring:
    2. datasource:
    3. driver-class-name: com.mysql.cj.jdbc.Driver
    4. url: jdbc:mysql://localhost:3306/mcy_wechat_data?useSSL=false&severTimezone=GMT%2b8
    5. username: name
    6. password: password

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

    1. Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
    2. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    3. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    4. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    5. at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    6. at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    7. at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    8. at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    9. at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
    10. at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
    11. at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
    12. at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
    13. at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
    14. 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把表情包已字符串形式给数据库了

  • 相关阅读:
    WebDAV之葫芦儿·派盘 + Koder
    Go语音中并发介绍
    自动化运维工具Ansible教程(一)【入门篇】
    【C#语言】DataGridView隔行显示颜色
    Word控件Spire.Doc 【图像形状】教程(3) :在 C#/VB.NET 中的指定位置插入图像
    旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript)
    深度学习基础知识 Dataset 与 DataLoade的用法解析
    从ReentrantReadWriteLock开始的独占锁与共享锁的源码分析
    基于SSM的农产品仓库管理系统设计与实现
    使用 PHP 和 MySQL 的安全注册系统
  • 原文地址:https://blog.csdn.net/m0_59799878/article/details/132962717