刚才在测试项目,随便复制文章添加的时候,突然报了个错误
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)修改 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 软件里修改
数据库属性
修改 article 表的编码
命令:
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
把之前的那条注释掉,加上下面这条,也有的人直接把后面的参数都去掉
- #spring.datasource.url=jdbc:mysql://localhost:3306/forum?useSSL=false&useUnicode=true&characterEncoding=utf-8
- spring.datasource.url=jdbc:mysql://localhost:3306/forum?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=TRUE
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏