【发布时间】:2016-05-31 22:30:44
【问题描述】:
我正在尝试将 mysql 查询的内容转储到 csv 中,并使用一些基于 java 的开源 csv 阅读器读取它。以下是我面临的问题,
- 我的数据集有大约 50 个字段。该数据集包含很少有文本具有换行符的字段。因此,为了防止破坏我的 CSV 阅读器,我提供了可选用 "\"" 括起来的字段,以便将换行符包裹在双引号内。在这种情况下,对于其他字段,即使没有换行符,它也会将它们包裹在双引号内.
- 默认情况下,执行 mysql 转储时的转义字符是 \(反斜杠)这会导致换行符出现在末尾,这会破坏 csv 解析器。要在最后删除这个 \,如果我给 Fields 转义了 '' (空字符串),它会导致我在文本中的双引号不会被转义,仍然会破坏 csv 读取。
如果我可以跳过换行符转义,那就太好了,但仍然保留转义双引号以导致 csv 阅读器不中断。
我可以在这里遵循什么建议?
谢谢, 斯里拉姆
【问题讨论】:
-
-
@Michael-sqlbot 感谢您的评论。我已经试过了。它还使用双引号转义文本字段内的换行符,这会破坏 csv 输出中的字段数。
-
抱歉,我误读了您的问题。我想你可以
SELECT CONCAT('"',REPLACE(column1,'"','""'),'"'), ... INTO OUTFILE ... -
@Michael-sqlbot 建议的是要走的路。如果可以的话,将
select into outfile与load data infile结婚。如果有人认为一种编程语言(你的名字)或一种工具会产生更快的结果,我不敢苟同。 -
我真的无法反驳这一点,尽管当我这样做时,我只使用 Perl,当然是 DBI 和
Text::CSV_XS,这是一个 Perl 模块,其工作内容是用 C 编写的,所以它非常快,并且有很多用于古怪转义和引用的选项,根据需要。