MySQL Load data infile -- 双引号中的双引号值如 "a "double"quoted value"

标签 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

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

感谢您的帮助

最佳答案

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。在这种情况下,脚本根本无法知道它是否是列分隔符。

关于MySQL Load data infile -- 双引号中的双引号值如 "a "double"quoted value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43229357/

相关文章:

php - 使用结果计算类别组

java - 在java中读取CSV

python - 如何在 Python 文档字符串中存储三个双引号?

arrays - 解析带有引用字段的字符串,如 Powershell 中的 CSV 行

shell - 在 shell 中转义环境变量中的引号

c++ - 在 C++ 中读取带有引号的 CSV/文本文件

mysql - 为什么编译器找不到 mysql 包含?

MySQL 表示 : Documentation #1064

javascript - 如何动态计算每页分页显示多少个项目

python - 为什么在写入 csv 时 Pandas 会删除前导零?