错误代码:1366
Incorrect string value: '\xc0\xee\xcb\xc4' for column 'name' at row 1
问题出在表的字符集可能是数据库的编码格式为latin1,需要改成utf8字符集。
修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;
但是这个时候我们尝试插入中文依旧报错,name列依旧无法存中文
我们尝试不给name输入数据,发现运行是没有问题的:
INSERT INTO stu VALUES(2,NULL,17,91.5,'2016-12-9',NULL);
运行结果:
1 queries executed, 1 success, 0 errors, 0 warnings
查询:INSERT INTO stu VALUES(2,NUll,17,91.5,'2016-12-9',null)
共 1 行受到影响
我们查询数据表编码发现name列的是latin1,需要改成utf8或者gbk字符集才可以存中文。
查询表编码:
SHOW CREATE TABLE 表名;
查询结果:
CREATE TABLE `stu` (
`id` int(11) DEFAULT NULL,
`name` char(11) CHARACTER SET latin1 DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`score` double(4,1) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`inser_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8
先清空表内数据(也可以不清空,如果不可以直接修改name列的字符集,可以清空之后再次尝试修改):
truncate table 表名;
再修改name列的字符集:
alter table 数据库名 modify 列名 数据类型 character set 字符集;
具体结果:
mysql> truncate table stu;
Query OK, 0 rows affected (0.05 sec)
mysql> alter table stu modify name char(11) character set utf8;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次插入中文,即可插入成功:
INSERT INTO stu VALUES(2,"李四",17,91.5,'2016-12-9',NULL);
运行结果:
1 queries executed, 1 success, 0 errors, 0 warnings
查询:INSERT INTO stu VALUES(2,"李四",17,91.5,'2016-12-9',null)
共 1 行受到影响
问题解决。