MySQL加载数据infile - 双引号中的双引号为" a" double"引用价值"

时间:2017-04-05 11:04:33

标签: mysql csv double-quotes load-data-infile

我有一个包含数百万行的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

它会截断第三列并向我发出警告,因为此行不包含所有列的数据。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

CSV已损坏。 MySQL或任何程序都无法导入它。如果在列中,则需要转义双引号。

您可以使用脚本修复CSV。如果引号在其前面或后面没有逗号,则它可能是文本的一部分,应该被转义。

以下正则表达式会执行negative lookbehind and lookahead来查找在其前面或后面没有引号的引号。

/(?<!^)(?<!,)(\s*)"(\s*)(?!,)(?!$)/

See it on regex101

在你可以运行的命令上

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