调了很久才发现核心错误所在,很坑!!

1.错误现象

Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F…’ for column ‘course’ at row 1

2.创建数据库,创建表,插入表(带汉字)的代码

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE tbl_employee(
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 last_name VARCHAR(25),
 gender CHAR(1),
 email VARCHAR(255)
);
INSERT INTO tbl_employee VALUES
(NULL,'穿越火线','男','Tecent@qq.com'),
(NULL,'天龙八部','男','Sohu@changyou.com'),
(NULL,'英雄联盟','女','Riot@qq.com');
SELECT * FROM tbl_employee;

3.主要错误原因

(1).字符集latin是没有办法向表中插入汉字的,需要设置为utf8;

(2).只把数据库和表那里的基字符集改为utf8是不够的,还需要用set语句改一下,参考改错过程第(3)步

(3).当字符集还不是utf8时,创建了一个表格,即便后续通过set或者其他方法改为了utf8,如下图:

mysql汉字和拼音匹配 mysql输入汉字报错_数据库


但是这个已经创出来的表格并没有utf8的效果,还不能插入汉字,后续创出来的表格才可以成功插入汉字,所以解决方法设置utf8成功之后,删除已创表格,再次创建并插入,具体步骤参考改错过程第(4)步

4.改错过程

(1).刚开始数据库mybatis(库名)的基字符集是latin1,表tbl_employee的基字符集是utf8,如下图:

mysql汉字和拼音匹配 mysql输入汉字报错_mysql汉字和拼音匹配_02


mysql汉字和拼音匹配 mysql输入汉字报错_mysql汉字和拼音匹配_03


(2).因为字符集如果是latin(此处是latin1)就没有办法插入汉字,所以我以为把数据库(mybatis-此处只是数据库的名字,和Mybatis框架无关)和表tlb_employee的字符集对应起来设置为utf8就可以解决问题,就进行了一步操作,如下图:

mysql汉字和拼音匹配 mysql输入汉字报错_java_04


mysql汉字和拼音匹配 mysql输入汉字报错_mysql_05


在数据库mybatis上右键点击改变数据库,选中utf8,数据库排序规则不用动,点击改变,这时数据库和表的字符集都是utf8,我以为问题解决了,但是还是出现了同样的错误。

(3). 于是我看了一下字符变量:

SHOW VARIABLES LIKE '%char%';

显示如下:

mysql汉字和拼音匹配 mysql输入汉字报错_java_06


character_set_server这一行显示的还是latin1,除了binary那一行其他行都要改成utf8才会有效,所以这里要手动把character_set_server这一行改成utf8。

SQLyog中输入代码:(我的MYSQL是5.7版本的)

SET character_set_server = utf8;

执行结束后再次执行查看代码:

SHOW VARIABLES LIKE '%char%';

显示如下:

mysql汉字和拼音匹配 mysql输入汉字报错_java_07


改过来了,再次执行插入语句,可还是发生了错误!!

注意注意!!!!!重点来了!!!!!

(4). 刚才在手动改utf8之前,即执行如下的SQL语句之前:

SET character_set_server = utf8;

表tlb_employee已经创建出来了,创表时的character_set_server变量就是latin1,即便后续将其改为utf8,但对于这个已经创出来的表格,并没有utf8的效果,那么可以将这个表删掉重建,重新插入:
删表代码如下:

DROP TABLE IF EXISTS tbl_employee;

创表代码和插入代码如下,和第二个标题一样:

USE mybatis;
CREATE TABLE tbl_employee(
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 last_name VARCHAR(25),
 gender CHAR(1),
 email VARCHAR(255)
);
INSERT INTO tbl_employee VALUES
(NULL,'穿越火线','男','Tecent@qq.com'),
(NULL,'天龙八部','男','Sohu@changyou.com'),
(NULL,'英雄联盟','女','Riot@qq.com');
SELECT * FROM tbl_employee;

SQLyog中选中这些语句执行,最终显示结果如下:

mysql汉字和拼音匹配 mysql输入汉字报错_英雄联盟_08


成功解决问题!!