Mysql加载数据跳过了太多记录

Mysql加载数据跳过了太多记录

我通过这种方式从 mysql 表中导出了这个 csv

select *  INTO OUTFILE '/tmp/myfile.csv'   FIELDS TERMINATED BY ',' FROM bouncemap

我需要使用 sed 将 IP 地址替换为开始 *在此 csv 中,始终用以下代码替换其他一些弹跳代码星星 *char。
问题是,在这个 csv 文件上使用 sed 之后,我尝试以这种方式将其导入到 mysql 的表中

LOAD DATA LOCAL INFILE '/tmp/myfile.csv' INTO TABLE table FIELDS TERMINATED BY ',' 

导入过程跳过了 70% 以上的记录。
我注意到,如果我将表导出为 csv,然后在 mysql 表中重新导入,没有使用 sed 一切都很好,所有记录都已导入。
我还注意到,如果我将 ip 地址替换为哈希char 而不是 star 的数量不是导入记录增加了 80%。
我在 Debian 6.0.5 上使用 mysql 5.1

有什么想法或建议吗?谢谢

答案1

好的伙计们,问题是有些记录太长了,mysql 添加了一些额外的\n在导出过程中,将 char 添加到记录中。
这意味着我得到了一些行,其中一条记录为空。
所以我的同事建议使用这个小技巧

select bouncetype, replace (bouncereason,'\n','')  INTO OUTFILE '/tmp/.csv' FIELDS TERMINATED BY ',' from bouncemap;

代替在这种情况下,如果行太长,则将 \n 换行符更改为不包含任何内容。

因此我设法使用 sed 来操作提取的文件,然后导入它,而 mysql 没有任何反应:D

相关内容