MySQL 在文件中加载数据 -- 双引号中的双引号作为 "a "double" quoted value"

MySQL Load data infile -- double quotes in a double quoted value as "a "double" quoted value"

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

它截断了第三列并给我警告,因为该行不包含所有列的数据。

感谢您的帮助

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

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

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

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

See it on regex101


像你这样的命令运行

perl -pe 's/(?<!,)(?<!^)(\s*)"(\s*)(?!,)(?!$)/\"/g' data.csv > data-fixed.csv

请注意,此方法并非万无一失。如果双引号后面确实有一个逗号,但它是文本的一部分,那么您几乎无法修复 CSV。在那种情况下,脚本根本无法知道它是否是列分隔符。

试试这个:

mysqlimport --fields-optionally-enclosed-by='"' --fields-terminated-by=, --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password YOUR_DATABASE YOUR_TABLE.csv