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

avatar 2018年06月02日16:33:23 6 4475 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
刚才在测试项目,随便复制文章添加的时候,突然报了个错误

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

  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0