MYSQL-LOAD DATA 0row问题解决

原创 2015年11月20日 16:54:56
问题描述:LOAD DATA 运行正常,但是返回 Query OK,0 ROWS affected...

MYSQL 数据库在本地WINDOWS里,运行LOAD DATA的时候没有报错,但是每次提示如下:


数据是在CSV文件里的,大概是几十万到几百万左右。内容格式如下:



试过:
1.加了LOCAL关键字
2.将file_name和created_year两个字段和SET语句删掉
3.删掉创建的分区代码
4.由于file_name和created_year两个字段是人为生成的,所以加入数据文件里的字段还是没有装载成功
5.尝试在另一台机器上建表,然后远程过去装载(加入LOCAL)还是一样
。。。


建表语句以及LOAD DATA语句:

create table tb_wx_fucn_sn_y
(
  product_code             varchar(32)   
 ,serial_number            varchar(32)   
 ,carton_barcode           varchar(32)   
 ,manufacture_time         varchar(32)   
 ,product_type             varchar(64)  default 'a'  
 ,product_desc             varchar(256)  
 ,file_name                varchar(128)  
 ,created_year             tinyint       
) engine=innodb default charset=utf8 comment='abc'
partition by list(created_year)
(  
  partition tp_2011 values in (2011)
 ,partition tp_2012 values in (2012)
 ,partition tp_2013 values in (2013)
 ,partition tp_2014 values in (2014)
 ,partition tp_2015 values in (2015)
 ,partition tp_2016 values in (2016)
)  ;


LOAD DATA INFILE 'E:\\tmp\\mw_20110701-20110831.csv'
INTO TABLE tb_wx_fucn_sn_y
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES 
(
  product_code    
 ,serial_number   
 ,carton_barcode  
 ,manufacture_time
 ,product_type    
 ,product_desc    
)
SET  file_name    = 'mw_20110701-20110831.csv'
    ,created_year = cast(substr(manufacture_time,1,4) as signed) 
;

尝试了两个多小时后,修改了搜索的关键字为“load data 0 row”,参考以下两个网页

http://stackoverflow.com/questions/10662558/load-data-infile-for-huge-file-no-warning-no-error-and-no-rows-affected

http://stackoverflow.com/questions/10935219/mysql-load-data-infile-works-but-unpredictable-line-terminator

LINES TERMINATED BY '\r\n' 修改为 LINES TERMINATED BY '\n' 装载成功。

但问题又来了,我之前也怀疑过可能是行结束符的问题,我还特意的通过UE来查看:


每一行都是以“OD OA”结束的,所以我才没有修改行结束符。

网上也说是装载几十万到几百万行数据的时候出现这个问题。不知是否MYSQL的一个BUG。


----------------------------------------分隔线----------------------------------------------------------------------------------------------------------------------------------------------------- 

下午LINES TERMINATED BY '\r\n' 修改为 LINES TERMINATED BY '\n'  


问题并没有解决,而是产生了另外的问题,代码为1262,只有部分的数据插入到表中。上网查了下这个错误代码,

有人说是配置问题。后面不知道看到那个答案说可能是字符集的问题,问题变得越来越复杂。

也是将character_set_database 从utf-8修改成gbk后,我发现LINES TERMINATED BY '\r\n'可能装载成功

但是,中文就变成了乱码,因为原来的源文件是UTF-8格式的。在一筹莫展的时候,我想起了

http://stackoverflow.com/questions/10935219/mysql-load-data-infile-works-but-unpredictable-line-terminator

里面的一种方法,将'\r'去掉。于是尝试着这样。代码如下:

LOAD DATA INFILE 'E:\\tmp\\mw_20110701-20110831.csv'
INTO TABLE tb_wx_fucn_sn_y
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES 
(
  product_code    
 ,serial_number   
 ,carton_barcode  
 ,manufacture_time
 ,product_type    
 ,@var 
)
SET  product_type = 'a'
    ,file_name    = 'mw_20150301-20150315.csv'
    ,product_desc = trim(trailing '\r' from @var)
    ,created_year = cast(substr(manufacture_time,1,4) as signed) 
;

然后,数据可以全部导进去,但是还是报了1262这个错误。目前才疏学浅,这只能留到以后再去解决了。毕竟这个问题已经

困扰了我整整一个下午,各种目前能想到的都试过,我怀疑还是由于是字符集的问题。或者只能吐槽下WINDOWS平台。。。


------------------------------------------------再次分隔线(20151121)-----------------------------------------------------------------------------

昨天出现1262这个错误后,以为没有对结果造成影响。但是,后来发现,其实数据是有受到影响的。如下图右边红框处的数据是多出来的。

我怀疑是由于修改了行结束符,导致串行了,即第二行的走到第一行来,然后由于字段定义的问题被截断了。



下图是本地数据库的字符集信息:


然后,数据文件的字符集也是UTF-8的,以前使用LOAD DATA INFILE的时候都没有问题


如果将数据文件转成GBK,装载的时候就报了1366这个错误,并且导致中文件信息丢失


如下图红框处,本来英文字符后还有一些中文字符的,但是就丢失了。



刚才无意(确实是不知道脑子里想到的是什么,忘记了为什么这样做), 将转义字符(")修改成(\),然后,。。。

神奇的事情发生了,居然没有装载成功了。那个兴奋感,一个”操“字随口而出,简直是。。。。

从昨天中午开始,困扰我到今天,差不多一天时间,十几个小时,差点将我的脑袋想炸了。。。

总结:

由于转义字符的书写错误(ESCAPED BY '"'),导致了装载的失败,但是又没有报错,所以无法定位到问题。

因为之前没有怎么用到转义字符,而且,之前那样书写也可以装载成功,所以导致我没有关注到问题会出现在那个地方。

将转义字符修改成反斜杠(ESCAPED BY '\\')后,问题解决。


mysql-load data local infile

在使用load data local infile从文本文件中加载数据到MySQL表中,若不显示指明fields段或enclosed段和line段,默认以制表符‘\t’,即一个tabj键为分隔符 即...
  • siliang13
  • siliang13
  • 2015年03月17日 16:45
  • 323

Data truncation: Data truncated for column/Data too long for column问题解决

    今天在做网站项目时。发现了这个错误:Data truncation: Data too long for column dcontent at row 1。我检查了以下。发现我插入到文本框里的...
  • leidengyan
  • leidengyan
  • 2008年10月21日 02:22
  • 12753

Cannot Initialize Data Bindings 问题解决

ADO Datagrid 控件出现错误“Cannot Initialize Data Binding”怎么解决?单击 开始-运行-输入“cmd”-输入“regsvr32 MSDATGRD.OCX” 然...
  • WUYUAN2011WOAINI
  • WUYUAN2011WOAINI
  • 2012年09月12日 14:01
  • 13142

php gzuncompress data error问题解决

最近一个项目里使用mysql数据库,维护单位要求字段平均长度必须小于1k,由于存的东西太多,有的达到了14k,所以必须要压缩 开始想的是对内容gzcompress后base64,但这会增加1/3的数...
  • lihb018
  • lihb018
  • 2017年10月11日 19:15
  • 370

mpi并行程序设计 启动 mpdboot

学期快结束了,总结MPi开发环境配置里面遇到的比较深刻的东西。 在配置好节点间无密码登录、安装MPI软件包之后 剩下的工作就是mpdboot   -n  X (这里X代表的是集群里面有多少节点)   ...
  • it114
  • it114
  • 2009年12月22日 08:02
  • 489

HTML问题解决笔记

HTML、JS、CSS 学习笔记
  • darical
  • darical
  • 2016年04月28日 14:53
  • 141

【gradle】问题及解决

DSL method not found exclude()我想从工程依赖的一个库工程中exclude掉其依赖的一个库。 我写成:compile project(':contacts'){ ...
  • xude1985
  • xude1985
  • 2016年05月23日 17:49
  • 172

关于Android Studio错误:local path doesn't exist 的问题解决方案

第一步:点击如下图红箭头指向的图标:第二步:重新编译项目,如果还有问题,试着执行File > Invalidate Caches/Restart。一般做完第一步就ok了!...
  • crystalddd
  • crystalddd
  • 2015年05月06日 15:29
  • 922

一个关于快排的问题

做1306的sorting algorithm的时候一开始写的快排超时了然后用ilovenwd师兄提供了下面的快排才过了你快排写得不好.试试一组 1000000 个0的数据.参考一下下面这个void ...
  • lwl_ls
  • lwl_ls
  • 2007年11月28日 01:02
  • 634

解决问题的通用思路 - 关于线上运行的程序出错

-查找原因 正向分析法: 查看日志,包括正常日志和错误日志。对于日志里的异常内容,找到每个错误,如果是和自己写的程序逻辑相关,则定位到具体代码,进行相关程序代码分析。 对比分析法:对比日志 ...
  • matthew_zhang
  • matthew_zhang
  • 2017年05月25日 23:55
  • 236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL-LOAD DATA 0row问题解决
举报原因:
原因补充:

(最多只允许输入30个字)