我正在尝试将一些查询结果导出到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中的代码,但我更喜欢保留原始文本的内容。
感谢。
答案 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';