【问题标题】:MySQL export text fields with special characters to outfileMySQL将带有特殊字符的文本字段导出到outfile
【发布时间】:2015-06-15 21:12:11
【问题描述】:

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

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

这是我正在使用的查询,用\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 中的代码开始,但我更喜欢保留原始文本的东西。

谢谢。

【问题讨论】:

    标签: mysql csv export-to-csv


    【解决方案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';
    

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2019-09-06
      • 2021-12-26
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多