ermutuxia

2020-10-23   阅读量: 1060

Mysql

用load data infile导入数据的时候出现这样的错误提示,导入的数据文件中有空行。

扫码加入数据分析学习群

Error Code: 1366. Incorrect integer value: '' for column 'data1' at row 390.422 sec 用load data infile导入数据的时候出现这样的错误提示


现有一个数据如下:

data_route_chinese.csv

用notepad++打开这个文件看一下

image.png

image.png

可以看到最后面有几个空行,只能用notepad++打开可以看到,直接双击文件打开看不到。

接下来我们创建一个表,然后导入这个数据


create database dd;

use dd;

create table biao2(

data1 int ,

name_of varchar(8) ,

linetype varchar(8) ,

start1 varchar(8) ,

end1 varchar(8),

number_of_worker int,

time_euse int,

total_of_goods int,

turnover_of_goods double,

goods varchar(8),

turnover double



);


show variables like '%secure%';

#'D:\\data_route_english.csv'

#'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\biao11.csv'

#用workbench导入

LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\data_route_chinese.csv' #一般直接将文件放在Uploads文件夹里面

#为什么必须要将数据文件放在那个文件夹下呢,是因为我们的my.ini文件中有一个变量secure_file_priv,这个变量的值是C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\

#这个变量有三类可能取值,

#1.取值位null的时候表示 -- 限制mysqld 不允许导入导出

#2.取值位/tmp/的时候表示 -- 限制mysqld的导入导出只能发生在/tmp/目录下

#3.取值位' ' 的时候表示 -- 不对mysqld 的导入 导出做限制

#显然我们现在属于第二种情况,必须把文件放到那个文件夹下才能正确上传,而我们也是这样做的。

INTO TABLE biao2

FIELDS TERMINATED BY '\,'

OPTIONALLY ENCLOSED BY '\"'

LINES TERMINATED by'\r\n'

ignore 1 lines;

select * from biao2;

然后就会出现错误提示

13:50:11LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\data_route_chinese.csv' #一般直接将文件放在Uploads文件夹里面 INTO TABLE biao2 FIELDS TERMINATED BY '\,' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED by'\r\n' ignore 1 linesError Code: 1366. Incorrect integer value: '' for column 'data1' at row 39

0.000 sec


image.png

说39行有问题,因为我们跳过了第一行,所以原数据的第40行就是这里所说的39行,再一看,39行是个空行,没有值,问题就出现在这里。

image.png

经过百度,发现这是mysql 5.x以上的版本如果是空值应该要写NULL。

官方说:得知新版本mysql对空值插入有"bug",要在安装mysql的时候去除默认勾选的enable strict SQL mode。

那么问题是我们发现问题的时候,肯定是已经安装完mysql了,这种情况下,我建议按照mysql的规则去做。但非要解决这个问题,可以从mysql中的配置 my.ini入手,以下是解决办法:

先关闭mysql服务(包含mysql和workbench等),再修改my.ini配置 这一点非常重要。(可以参考链接:如何彻底关闭mysql服务 https://www.pinggu.com/post/details/5f96310b31abb520d6250a8d)

my.ini中查找sql-mode,默认为sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION",

将其修改为sql-mode="NO_ENGINE_SUBSTITUTION",重启mysql后即可。

image.png

以记事本方式打开my.ini文件,最好可以用Notepad++打开

image.png

修改为sql-mode="NO_ENGINE_SUBSTITUTION"

然后保存后关闭这个文件,再启动mysql服务。

重新启动work bench,删掉原有连接重新创建一个新的连接,如果无法启动,请参考我这个链接:https://www.pinggu.com/post/details/5f96381e91c8cb224686a66c

image.png

重新执行命令

发现可以成功导入空行了,只是有个提醒而已

image.png


及其需要注意的是:

1.修改my.ini文件之前需要将mysql服务彻底关闭,很多人这一步做的不到位。

2.修改my.ini文件之后保存然后关闭my.ini文件

3.重新启动mysql


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0885 1 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子