我有一个包含数百万行的csv文件。这是我用来加载数据的命令
load data local infile 'myfile' into table test.mytable
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\n' ignore 1 lines
除了一些双引号字符串中有双引号的行之外,几乎所有内容都能满足。如在
"first column",second column,"third column has "double quotes" inside", fourth column
它会截断第三列并向我发出警告,因为此行不包含所有列的数据。
感谢您的帮助
答案 0 :(得分:1)
CSV已损坏。 MySQL或任何程序都无法导入它。如果在列中,则需要转义双引号。
您可以使用脚本修复CSV。如果引号在其前面或后面没有逗号,则它可能是文本的一部分,应该被转义。
以下正则表达式会执行negative lookbehind and lookahead来查找在其前面或后面没有引号的引号。
/(?<!^)(?<!,)(\s*)"(\s*)(?!,)(?!$)/
在你可以运行的命令上
perl -pe 's/(?<!,)(?<!^)(\s*)"(\s*)(?!,)(?!$)/\1\\"\2/g' data.csv > data-fixed.csv
请注意,此方法并非傻瓜式。如果有一个双引号后面有一个逗号,但它是文本的一部分,那么几乎无法修复CSV。在这种情况下,脚本无法知道它是否是列分隔符。
答案 1 :(得分:-1)
试试这个:
mysqlimport --fields-optionally-enclosed-by='"' --fields-terminated-by=, --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password YOUR_DATABASE YOUR_TABLE.csv