mysql插入中文失败

在springboot项目中,通过前端页面操作对mysql插入数据,在包含中文数据的情况下插入失败,通过后台代码可以看到抛出类似如下的异常:

 java.sql.SQLException: Incorrect string value: '\xE7\x9A\x84\xE8\x90\xA8...' for column 'name' at row 1

很显然,我们在name属性中设置的中文出现了编码问题导致插入数据库失败。

问题排查:

1、在后台打印前端传过来的数据显示中文正常,排除了前端传到后台数据出错问题。

2、首先想到的就是连接数据库的url配置字符集是否有问题,查看配置文件如下,显然也没问题

url:  jdbc:mysql://127.0.0.1:3306/xxxx?useUnicode=true&characterEncoding=utf-8

3、基本定位就是数据库的编码设置有问题了。

通过  

  1. show create database xxxx1(数据库名);     
  2. show create table xxxx2(表名);

可以看到数据库以及数据表的编码都是mysql的默认编码latin1,如表:

CREATE TABLE `xxxx2` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(30) NOT NULL COMMENT '名称'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 

修改数据库以及数据表的编码:

  1. alter database xxxx1 character set utf8;        //修改数据库编码
  2. alter table xxxx2 default character set utf8;       //修改数据表编码

此时执行插入中文操作依然显示失败。

4、想了很久也找不到问题所在,最后重新执行   show create table xxxx2;   看到如下表结构:

CREATE TABLE `xxxx2` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(30) CHARACTER SET latin1 NOT NULL COMMENT '名称',
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  

可以看到字段的编码为latin1,显然就有问题

通过如下命令修改字段的编码:

 ALTER TABLE xxxx2 CHANGE name  name varchar(30) CHARACTER SET utf8 NOT NULL COMMENT '名称';

最后测试插入含中文的sql,能够成功执行。

附录:

另外,可以通过  show variables like "% character %";   查看mysql的编码设置。

MySql的配置文件在Windows下是在安装目录的my.ini,在Linux下为/etc/my.cnf,修改为utf8可以在配置文件中添加

-在 [mysqld] 标签下加上以下内容:

default-character-set = utf8

character_set_server = utf8

之后重起 mysql 服务即可。

你可能感兴趣的:(mysql插入中文失败)