如何将MySQL结果以表格格式存储到文件中

9

我正在尝试创建一个文件,并将查询结果存储在其中。我有一个批处理文件,其中包含单个查询。

USE database1;

SELECT * FROM table WHERE name = "abc" INTO OUTFILE output.txt;

QUIT

执行此批处理文件时,使用以下命令:
mysql -u root -p -t -vvv < select.sql

然而,结果没有表格格式化,并且字段名称在顶部缺失。
100 abc Brown 32
101 abc Flair 25
102 abc McDonald 45
.
.
.

如果我删除 INTO OUTFILE 语句,并在终端上打印结果,则可以正常工作。

+----+------+---------+-----+
| id | name | surname | age |
+----+------+---------+-----+
| 100| abc  | Brown   |   32|
| 101| abc  | Flair   |   25|
| 102| abc  | McDonald|   45|
+----+------+---------+-----+

我该如何在txt文件中实现上述内容?

更新

特别感谢GreyBeardedGeek。这是在GreyBeardedGeek的帮助下解决此问题的解决方案。

批处理文件:

USE database1;

SELECT * FROM table WHERE name = "abc";

QUIT

以及MySQL客户端:

mysql -u root -p -t -vvv < select.sql > output.txt

1
移除INTO outfile,然后执行:mysql -u root -p -t -vvv < select.sql > output.txt - GreyBeardedGeek
好的!嗯...我在这里有点疯了!它能工作,但为什么?有什么区别吗?非常感谢 :) - OutOfBoundsException
是的,它通常用于获取CSV或TSV(制表符分隔)输出。 - GreyBeardedGeek
还有一件事..我的输出结果顶部有SQL查询。有什么办法可以去掉它吗?这方面有任何标志吗? - OutOfBoundsException
1
如果您正在使用Linux,则可以通过sed '1 d'将结果管道化,例如mysql -u root -p -t -vvv < select.sql | sed '1 d' > output.txt。 - GreyBeardedGeek
显示剩余3条评论
3个回答

5
这应该可以解决问题:
mysql -u root -p -t -vvv < select.sql | sed '1 d' > output.txt

sed '1 d' 部分是什么意思? - mLuby
1
它会移除输出的第一行,这里指的是 SQL 查询。 - GreyBeardedGeek
我猜 -t 选项会使输出以表格格式呈现,但 -vvv 是什么意思? - Nicholas Cousar
-vvv 激活“详细”模式 - GreyBeardedGeek

0

您还可以执行以下操作:

mysql -uroot -p DatabaseName -t -e "select * from table" > file.txt

不需要创建一个SQL文件,然后过滤掉第一行。


0
除了使用mysql客户端程序选项(mysql --help)外,还可以在.my.cnf文件中配置默认值。例如(MacOs、Linux)启用--table选项:
编辑/创建一个文件:
vim ~/.my.cnf

添加/更新:

[client]
table

下一次调用mysql命令行程序时,它将使用.my.cnf文件中的选项以表格格式生成输出,例如与已调用的相同:

mysql ... --table ... 

请注意,命令行选项将覆盖 .my.cnf 文件中的选项。
参考:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接