mysql导入SQL脚本的时候报ERROR 1406 (22001) at line 13: Data too long for column ‘gender’ at row 1的错误。
一.背景
1.1.SQL脚本
我们要执行如下的SQL脚本将数据导入到我们的MySQL数据库中。
CREATE DATABASE school;
USE school;
/*----------学生信息表----------*/
CREATE TABLE `student` (
`sid` int NOT NULL COMMENT '学号',
`sname` varchar(100) DEFAULT NULL COMMENT '学生姓名',
`gender` char(1) DEFAULT NULL COMMENT '学生性别',
`class_id` int DEFAULT NULL COMMENT '班号',
PRIMARY KEY (`sid`) USING BTREE
) COMMENT='学生表';
INSERT INTO student (sid, sname, gender, class_id) VALUES(1, '张三', '女', 1);
INSERT INTO student (sid, sname, gender, class_id) VALUES(2, '李四', '女', 1);
INSERT INTO student (sid, sname, gender, class_id) VALUES(3, '王五', '男', 2);
INSERT INTO student (sid, sname, gender, class_id) VALUES(4, '张三', '男', 3);
1.2.导入sql脚本
我们执行如下命令将SQL脚本将数据导入到我们的MySQL数据库中。
mysql -uroot -p123456 < test.sql
出现了如下的错误。
二.排查问题
我们通过上网查阅资料了解到报错的原因是MySQL会截断过长的输入,这里需要把sql-mode设置宽松一点。
三.解决问题
我们在MySQL窗口中输入以下代码即可,但是这是一次性的,每次重启设置都会回到以前的样子。
SET @@global.sql_mode= '';
四.测试
我们输入完上述命令后,在此执行SQL脚本导入命令,发现没有再报该错误。
并且我们在被导入的数据库中查询SQL脚本导入的数据是正确的。
D:\test>mysql -uroot -p123456
mysql> use school;
Database changed
mysql> select * from student;
+-----+-------+--------+----------+
| sid | sname | gender | class_id |
+-----+-------+--------+----------+
| 1 | 张三 | 女 | 1 |
| 2 | 李四 | 女 | 1 |
| 3 | 王五 | 男 | 2 |
| 4 | 张三 | 男 | 3 |
+-----+-------+--------+----------+
4 rows in set (0.00 sec)