我使用此查询将一些csv数据转储到mysql中
LOAD DATA LOCAL INFILE 'path/LYRIC.csv' INTO TABLE LYRIC CHARACTER SET euckr FIELDS TERMINATED BY '|';
当我这样做时,我可以看到来自控制台的跟踪日志。
...
[2017-09-13 11:24:10] ' for column 'SONG_ID' at row 3
[2017-09-13 11:24:10] [01000][1261] Row 3 doesn't contain data for all columns
[2017-09-13 11:24:10] [01000][1261] Row 3 doesn't contain data for all columns
...
我认为csv将一些换行符作为列数据,因此它会破坏所有解析过程。
csv中的单个记录看起来像......
000001|2014-11-17 18:10:00|2014-11-17 18:10:00|If I were your September
I''d whisper a sunset to fly through
And if I were your September
|0|dba|asass|2014-11-17 18:10:00||||2014-11-17 18:10:00
所以LOAD DATA
将第1行作为记录推送,然后尝试第2行,依此类推,即使这是一个数据。
我该如何解决?我应该向客户请求不同类型的文件吗?
P.S。我对这个csv工作很新。
答案 0 :(得分:1)
csv中的多行fieds应该用双引号括起来,如下所示:
000001|2014-11-17 18:10:00|2014-11-17 18:10:00|"If I were your September
I''d whisper a sunset to fly through
And if I were your September
"|0|dba|asass|2014-11-17 18:10:00||||2014-11-17 18:10:00
该字段内的任何双引号都应该使用另一个双引号进行转义。
当然,解析器必须支持(并且可能被指示使用)多行字段。