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

MySQL export text fields with special characters to outfile

我正在尝试将一些查询结果导出到 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 拆分为任何导出文件中的多行 and/or 列。

真题:

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

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

谢谢。

好吧,我不知道如何转义所有特殊字符,所以这里有一个在有问题的字符上使用 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';