解析SELECT INTO OUTFILE的输出

时间:2014-04-14 16:19:48

标签: java php mysql load-data-infile into-outfile

我试图解析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"

解析SELECT INTO OUTFILE输出的正确方法是什么?

鉴于上述出口选项,我还应该担心什么?我的代码已在列值中处理以下情况:

(按照确切的顺序)

  • 将\ N列值视为NULL
  • 替换\"与"

注意:

如果有人能提供MySQL的LOAD DATA INFILE的伪代码,那就太棒了。该陈述的确切行为是我试图模仿的。

注意:

我的解析器是用Java编写的,但我可以更好地理解PHP

1 个答案:

答案 0 :(得分:0)

我最终使用OpenCSV;虽然我不得不为NULL值编写一个特殊的处理程序,MySQL将其转储为" \ N"。幸运的是,我的架构没有任何可以为空的字符串字段,因此我可以安全地假设所有出现的" \ N"是NULL。

感谢@Doge提醒我不要重新发明轮子:)