当前位置:  开发笔记 > 编程语言 > 正文

如何在终端中最好地显示MySQL SELECT返回太多字段?

如何解决《如何在终端中最好地显示MySQLSELECT返回太多字段?》经验,为你挑选了7个好方法。

我正在使用PuTTY运行:

mysql> SELECT * FROM sometable;

sometable有许多字段,这导致许多列试图在终端中显示.字段将换行到下一行,因此很难将列标题与字段值对齐.

在终端中查看此类数据有哪些解决方案?

我没有也不想访问phpMyAdmin - 或任何其他GUI界面.我正在寻找这样的命令行解决方案:将MySQL Query结果保存到文本或CVS文件中



1> Rytmis..:
SELECT * FROM sometable\G

此查询垂直显示行,如下所示:

*************************** 1. row ***************************
                 Host: localhost
                   Db: mydatabase1
                 User: myuser1
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...
*************************** 2. row ***************************
                 Host: localhost
                   Db: mydatabase2
                 User: myuser2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          ...


尽管Windows不区分大小写,但这个"G"必须大写.
记录在这里:https://dev.mysql.com/doc/refman/5.0/en/mysql-commands.html
只是为了澄清以上注释,当您输入SELECT * FROM sometable \ G时,您是将字符串发送到mysql命令行客户端,而不是Windows,这就是为什么G区分大小写的原因。

2> Daniel Schne..:

您可能还会发现这个有用(仅限非Windows):

mysql> pager less -SFX
mysql> SELECT * FROM sometable;

这将通过less命令行工具管道输出- 使用这些参数 - 将为您提供一个表格输出,可以使用光标键水平和垂直滚动.

通过q按键退出此视图,这将退出该less工具.


可以使用nopager重置.
这是天才.优秀的小费.从一开始我就想要这个.
`less`可以做更酷的事情.使用`&`,您可以使用正则表达式进一步过滤(仅显示匹配的行)结果.这除了`/`搜索(它仍会导致突出显示)之外还有效.再次按"&"重置过滤器,然后按Return键.
通过点击"/"然后编写搜索字符串(也可以是正则表达式)来完成搜索,然后按回车键.按"N"向后搜索,按"N"("Shift + n`")向后搜索.
如果输出已经适合屏幕,F将立即退出.X是为了防止在退出时尝试清除屏幕.请参阅less man页面.

3> Swiety..:

尝试启用垂直模式,使用\G执行查询而不是;:

mysql> SELECT * FROM sometable \G

您的结果将以垂直模式列出,因此每个列值将打印在单独的行中.输出将更窄但显然更长.



4> davidmh..:

您可以使用--table-t选项,它将输出一组漂亮的结果

echo 'desc table_name' | mysql -uroot database -t

或者将查询传递给mysql的其他方法,例如:

mysql -uroot table_name --table < /tmp/somequery.sql

输出:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+



5> Ronan Boitea..:

使用mysql's ego命令

mysqlhelp命令:

ego(\ G)发送命令到mysql服务器,垂直显示结果.

因此,通过附加\G到你select,你可以得到一个非常干净的垂直输出:

mysql> SELECT * FROM sometable \G

使用寻呼机

您可以告诉MySQL使用less寻呼机,其-S选项可以切断宽线并为您提供可以使用箭头键滚动的输出:

mysql> pager less -S

因此,下次运行具有宽输出的命令时,MySQL将允许您使用less寻呼机浏览输出:

mysql> SELECT * FROM sometable;

如果您已完成寻呼机并希望返回常规输出stdout,请使用以下命令:

mysql> nopager



6> 小智..:

默认的寻呼机是stdout.stdout具有列限制,因此输出将被包装.您可以将其他工具设置为寻呼机以格式化输出.有两种方法.一种是限制列,另一种是在vim中处理它.

第一种方法:

?  ~  echo $COLUMNS
179

mysql> nopager
PAGER set to stdout
mysql> pager cut -c -179
PAGER set to 'cut -c -179'
mysql> select * from db;
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| Host      | Db         | User       | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
| %         | test       |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| %         | test\_%    |            | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
| localhost | it         | it         | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
+-----------+------------+------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-
4 rows in set (0.00 sec)

mysql>

输出不完整.内容适合您的屏幕.

第二个:

将vim模式设置为nowrap在.vimrc中

?  ~  tail ~/.vimrc

" no-wrap for myslq cli
set nowrap

mysql> pager vim -
PAGER set to 'vim -'
mysql> select * from db;
    Vim: Reading from stdin...
+-----------+------------+------------+-------------+-------------+----------
| Host      | Db         | User       | Select_priv | Insert_priv | Update_pr
+-----------+------------+------------+-------------+-------------+----------
| %         | test       |            | Y           | Y           | Y
| %         | test\_%    |            | Y           | Y           | Y
| localhost | phpmyadmin | phpmyadmin | Y           | Y           | Y
| localhost | it         | it         | Y           | Y           | Y
+-----------+------------+------------+-------------+-------------+----------
~
~
~



7> santiago ari..:

只是为了补充我认为最好的答案,我还使用less -SFX了另一种方式:我喜欢将其添加到.my.cnf主文件夹中的文件中,一个示例cnf文件如下所示:

[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'

这样做的好处是,less仅当查询的输出实际上超过一页时才使用,这里是所有标志的解释:

-S:单行,当行比屏幕宽时不要跳过行,而是允许向右滚动。

-F:退出一个屏幕,如果内容不需要滚动,则仅发送到stdout。

-X:无init,禁用每次配置为输出的“ less”输出。

注意:在.my.cnf文件中不要将pager命令放在[client]关键字下面;尽管可能效果mysql很好,但mysqldump会抱怨无法识别它。

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有