mysql select into outfile没有任何行终止字符

时间:2013-10-07 15:45:30

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

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

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

非常感谢提前!

3 个答案:

答案 0 :(得分:2)

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

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

如果你遇到限制(有多少行是GROUP_CONCATinated,那么如果你使用像OS这样的Unix,最好使用以下

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

答案 1 :(得分:1)

感谢@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

这样做了,但我想知道是否有更好的溶解?

答案 2 :(得分:0)

使用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';