调了很久才发现核心错误所在,很坑!!
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,如下图:
但是这个已经创出来的表格并没有utf8的效果,还不能插入汉字,后续创出来的表格才可以成功插入汉字,所以解决方法设置utf8成功之后,删除已创表格,再次创建并插入,具体步骤参考改错过程第(4)步。
4.改错过程
(1).刚开始数据库mybatis(库名)的基字符集是latin1,表tbl_employee的基字符集是utf8,如下图:
(2).因为字符集如果是latin(此处是latin1)就没有办法插入汉字,所以我以为把数据库(mybatis-此处只是数据库的名字,和Mybatis框架无关)和表tlb_employee的字符集对应起来设置为utf8就可以解决问题,就进行了一步操作,如下图:
在数据库mybatis上右键点击改变数据库,选中utf8,数据库排序规则不用动,点击改变,这时数据库和表的字符集都是utf8,我以为问题解决了,但是还是出现了同样的错误。
(3). 于是我看了一下字符变量:
SHOW VARIABLES LIKE '%char%';
显示如下:
character_set_server这一行显示的还是latin1,除了binary那一行其他行都要改成utf8才会有效,所以这里要手动把character_set_server这一行改成utf8。
SQLyog中输入代码:(我的MYSQL是5.7版本的)
SET character_set_server = utf8;
执行结束后再次执行查看代码:
SHOW VARIABLES LIKE '%char%';
显示如下:
改过来了,再次执行插入语句,可还是发生了错误!!
注意注意!!!!!重点来了!!!!!
(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中选中这些语句执行,最终显示结果如下:
成功解决问题!!