【问题标题】:mysql select into outfile without any line termination charactermysql select into outfile 没有任何行终止字符
【发布时间】:2013-10-07 15:45:29
【问题描述】:

我尝试在没有任何行/字段终止字符的情况下将表中一个字段的所有数据打印到文件中。我只想将所有行连接起来并打印为输出行中的一行。这是我的做法:

CREATE TABLE tbl (txt VARCHAR(100));
INSERT INTO tbl VALUES ("text1");
INSERT INTO tbl VALUES ("text2");
INSERT INTO tbl VALUES ("text3");

SELECT txt FROM tbl;

SELECT txt INTO OUTFILE 'test.txt' LINES TERMINATED BY '' FROM tbl;

不幸的是,在输出中我得到了标签:

text1   text2   text3   

如果我添加

FIELDS TERMINATED BY ''

然后将所有 100 个字符打印到文件中 (VARCHAR(100)

text1                                                                                               text2                                                                                               text3                                                                                               

我应该怎么做才能将所有内容连接为:

text1text2text3

非常感谢!

【问题讨论】:

    标签: mysql select formatting into-outfile select-into-outfile


    【解决方案1】:

    假设文本列本身没有空格,请尝试 SELECT REPLACE(GROUP_CONCAT(txt),',','') AS txt INTO OUTFILE 'test.txt' FROM tbl ;

    如果数据中有空格,则再换一个 REPLACE( ,' ','')

    如果遇到限制(要对多少行进行 GROUP_CONCAT 化,那么如果您使用 Unix 之类的操作系统,最好使用以下操作

    cat 'test.txt' | tr -d '\t'
    

    【讨论】:

    • 嗨,帕拉格,感谢您的帮助!由于您的建议,我实际上能够解决我的问题。我将在一秒钟内发布我的解决方案。我不明白您在文本栏中对 SPACES 的评论。如果 group_by 使用的默认分隔符是 COMMA ',' 为什么 SPACES 很重要,即使它是 SPACE 那么为什么要将它包装到另一个 REPLACE 帮助中呢?我需要在数据库级别做所有事情,所以使用 tr 不是一个选项。无论如何,我在 Windows 上,所以如果我想的话,我什至无法使用它。再次感谢您的帮助!
    【解决方案2】:

    感谢@Parag,我能够通过以下方式解决我的问题:

    SELECT GROUP_CONCAT(txt SEPARATOR '') INTO OUTFILE 'test.txt' LINES TERMINATED BY '' FROM tbl;
    

    这样我就不必用 REPLACE 来包装所有内容,也不必担心文本是否包含 GROUP_CONCAT 使用的默认分隔符,即 COMMA ','。

    值得记住的重要一点是 GROUP_CONCAT() 有一个最大长度限制,当你的字段很长时你可能会遇到这个限制。在我的例子中,txt 字段超过 900 个字符,所以我不得不使用:

    SET SESSION group_concat_max_len = 1000000
    

    这成功了,但我想知道是否有更好的解决方案?

    【讨论】:

      【解决方案3】:

      使用 DUMPFILE:

      CREATE TABLE tbl (txt VARCHAR(100));
      INSERT INTO tbl VALUES ("text1");
      INSERT INTO tbl VALUES ("text2");
      INSERT INTO tbl VALUES ("text3");
      
      SELECT txt FROM tbl;
      
      SELECT txt INTO DUMPFILE 'test.txt';
      

      【讨论】:

        猜你喜欢
        • 2010-11-05
        • 2011-02-21
        • 2019-09-29
        • 2012-02-26
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 2011-02-17
        相关资源
        最近更新 更多