【问题标题】:How to store MySQL results to a file in table format如何将 MySQL 结果以表格式存储到文件中
【发布时间】:2013-01-08 21:20:26
【问题描述】:

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

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

【问题讨论】:

  • 删除INTO outfile,然后执行:mysql -u root -p -t -vvv output.txt
  • 好的!嗯......我在这里失去了理智!正在工作,但为什么?有什么不同?非常感谢:)
  • INTO OUTFILE 更改默认输出,但它具有引用值、行分隔符等选项。
  • 因此,如果您想存储 csv 文件,INTO OUTFILE 很有用。并选择分隔符等。我是对的吗?
  • 如果你在 Linux 上,通过 sed '1 d' 传递结果,例如mysql -u root -p -t -vvv output.txt

标签: mysql formatting batch-processing


【解决方案1】:

这应该可以解决问题:

mysql -u root -p -t -vvv < select.sql | sed '1 d' > output.txt

【讨论】:

  • sed '1 d' 部分有什么作用?
  • 它删除输出的第一行,在这种情况下,是 sql 查询
  • 我猜-t 选项会导致输出为表格格式,但-vvv 有什么作用?
  • -vvv 激活“详细”模式
【解决方案2】:

您还可以执行以下操作:

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

这样就不用先做一个SQL文件然后过滤掉第一行了。

【讨论】:

    【解决方案3】:

    除了使用 mysql 客户端程序选项(mysql --help)之外,还可以在 .my.cnf 文件中配置默认​​值。启用 --table 选项的示例(MacOs、Linux):

    编辑/创建文件:

    vim ~/.my.cnf
    

    添加/更新:

    [client]
    table
    

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

    mysql ... --table ... 
    

    请注意,命令行选项会覆盖 .my.cnf 文件中的选项。

    参考资料:

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2018-12-15
      • 2012-08-14
      • 2023-03-27
      相关资源
      最近更新 更多