MySQL将具有特殊字符的文本字段导出到outfile

时间:2015-04-10 08:16:59

标签: mysql csv export-to-csv

我正在尝试将一些查询结果导出到CSV或TAB分隔文件。其中一个字段是文本blob,其中包含特殊字符,可能包括单引号和双引号("'),换行符(\n)和制表符(\t )。

+------+------+--------------------------------------------------------+
| col1 | col2 | text                                                   |
+------+------+--------------------------------------------------------+
|    1 |  foo | Oh hey why not "this" or t'is                          |
or a newline while we are at it |
+------+------+--------------------------------------------------------+

这是我正在使用的查询,对于TAB分隔文件,\t代替,

SELECT col1, col2, text
FROM   mytable
INTO OUTFILE '/tmp/foo.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

这既不适用于CSV或TAB分隔文件,因为文本字段中的任何逗号或引号或制表符最终会将文本blob拆分为任何导出文件中的多行和/或列。

实际问题:

有没有办法在文本字段中转义特殊字符如", ', \t, \n并写入CSV或TAB文件,或者在尝试写入文件之前是否需要替换这些字符?

如果要替换这些内容,我会尝试使用REPLACE函数开始使用this question中的代码,但我更喜欢保留原始文本的内容。

感谢。

1 个答案:

答案 0 :(得分:1)

好吧,我没有弄清楚如何逃避所有特殊字符,所以这里是使用REPLACE对违规字符的解决方案:

SELECT col1, col2, 
       replace(replace(replace(text, '\n', 'n'), ',', '\,'), '\"', '\'') text 
FROM   mytable
INTO OUTFILE '/tmp/foo.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';