我试图解析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字符拆分该行。
即。我的解析器生成以下列值:
"一些"和"价值"应该被解析为一个完整的字符串" some,value"
解析SELECT INTO OUTFILE输出的正确方法是什么?
鉴于上述出口选项,我还应该担心什么?我的代码已在列值中处理以下情况:
(按照确切的顺序)
注意:
如果有人能提供MySQL的LOAD DATA INFILE的伪代码,那就太棒了。该陈述的确切行为是我试图模仿的。
注意:
我的解析器是用Java编写的,但我可以更好地理解PHP
答案 0 :(得分:0)
我最终使用OpenCSV;虽然我不得不为NULL值编写一个特殊的处理程序,MySQL将其转储为" \ N"。幸运的是,我的架构没有任何可以为空的字符串字段,因此我可以安全地假设所有出现的" \ N"是NULL。
感谢@Doge提醒我不要重新发明轮子:)