MySQL错误代码:1366 中文存入报错

491 阅读2分钟

错误代码:1366
Incorrect string value: '\xc0\xee\xcb\xc4' for column 'name' at row 1


问题出在表的字符集可能是数据库的编码格式为latin1,需要改成utf8字符集。

修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;

但是这个时候我们尝试插入中文依旧报错,name列依旧无法存中文
mysql1366.png.svg 我们尝试不给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 行受到影响

问题解决。