Incorrect string value: '\xF0\x9F\x98\xB3)\xE3...' for column 'content'解决办法

刚才在测试项目,随便复制文章添加的时候,突然报了个错误 org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement 意思是:SQL 语句无法执行。 然后看最下面的异常信息,Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xB3)\xE3...' for column 'content' at row 1。   复制错误,百度一下。 是编码的问题,数据库的编码,这个问题我已经记得遇到过一次。 同时也测试聊天中的发表情,无法成功!  

原因和解决办法

原因是数据中存在emoj表情,而这些表情是按照四个字节一个单位进行编码的,而我们通常使用的utf-8编码在mysql数据库中默认是按照3个字节一个单位进行编码的,正是这个原因导致将数据存入mysql数据库的时候出现错误,那么这个问题我们应该怎么解决呢?     我分为下面三个步骤来解决: (1):修改mysql数据库的编码为uft8mb4 (2):修改数据表的编码为utf8mb4 (3):修改字段的编码为utf8mb4 (4):修改连接数据库的连接代码   现在就开始吧!

1、修改数据库编码

(1)修改 mysql 配置文件 Windows 是my.ini,Linxu 和 Mac my.cnf 这里介绍 Mac 下的修改方法 编辑 /etc/my.cnf 文件 该文件仅可读,需要修改权限 sudo chown 755 /etc/my.cnf sudo vim /etc/my.cnf   (2) Navicat Premium 软件里修改 数据库属性  

2、数据表修改

修改 article 表的编码   命令:

alter table `article` convert to character set utf8bm4;

3、修改字段(必须改,这里是个坑)

同样用上面的代码,把一张表里所有的字段编码都改成 utfmb4

alter table `article` convert to character set utf8bm4;

4、修改数据库连接URL

把之前的那条注释掉,加上下面这条,也有的人直接把后面的参数都去掉

  1. #spring.datasource.url=jdbc:mysql://localhost:3306/forum?useSSL=false&useUnicode=true&characterEncoding=utf-8
  2. spring.datasource.url=jdbc:mysql://localhost:3306/forum?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=TRUE

发表评论

目前评论:1