我正在尝试解析 SELECT INTO OUTFILE 的 CSV 输出。(目的是将数据批量加载到外部 NoSQL 数据库中;批量加载器需要特定的文件格式,所以我正在编写一个生成器)
我的主要问题是转义字符的处理 - 特别是 FIELDS TERMINATED BY 字符。当分隔符出现在列值中时,MySQL 似乎没有转义分隔符。
我的查询的导出选项如下:
FIELDS
TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES
TERMINATED BY '\n'
我得到 CSV 行,例如:
"value1","some, value","another value","value3"
这会破坏我的 CSV 行解析器,它只是使用 FIELDS TERMINATED BY 字符拆分行。
即我的解析器产生以下列值:
- 价值1
- 一些
- 价值
- 另一个值
- 价值3
"some" 和 "value" 应该被解析为一个完整的字符串 "some, value"
解析 SELECT INTO OUTFILE 输出的正确方法是什么?
考虑到上述导出选项,我还有什么需要担心的吗?我的代码已经在列值中处理了以下情况:
(按确切顺序)
- 将 \N 列值视为 NULL
- 用。。。来代替 ”
笔记:
如果有人能提供 MySQL 的 LOAD DATA INFILE 的伪代码,那就太好了。该声明的确切行为是我试图效仿的。
笔记:
我的解析器是用 Java 编写的,但我可以更好地理解 PHP