MySql Select,MANY FIELDS,如何最好的显示在terminal?

我正在使用Putty(命令行)并运行一个

mysql> SELECT * FROM sometable; 

“sometable”有许多领域,这导致许多列试图在terminal显示。 字段包装到下一行,因此很难将列标题与字段值alignment。

有什么解决scheme在terminal浏览这些数据?

(ps我没有/想访问phpMyAdmin或其他GUI界面)

寻找命令行解决scheme,例如将MySQL Query结果保存到文本或CVS文件( save-mysql-query-results-into-a-text-or-csv-file )

 SELECT * FROM sometable\G 

显示这样的行:

 *************************** 1. row *************************** id: 1 

你也可能会发现这个有用的(非Windows):

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

这将通过less命令行工具,通过这些参数,给你一个表格输出,可以用光标键水平和垂直滚动。

通过按下q键离开这个视图,这将退出less工具。

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

 mysql> SELECT * FROM sometable \G 

您的结果将以垂直模式列出,因此每个列值将被打印在一个单独的行中。 产量会变窄,但明显要长得多。

你可以使用--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 | | +--------------+--------------+------+-----+---------+----------------+ 

默认的寻呼机是标准输出。 标准输出具有列限制,所以输出将被包装。 您可以将其他工具设置为分页器来格式化输出。 有两种方法。 一个是限制列,另一个是在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模式设置为您的.vimrc中的nowrap

 ➜ ~ 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 +-----------+------------+------------+-------------+-------------+---------- ~ ~ ~ 

如果你使用交互式的mysql,你可以设置你的传呼机使用sed,像这样:

 $ mysql -u <user> p<password> mysql> pager sed 's/,/\n/g' PAGER set to 'sed 's/,/\n/g'' mysql> SELECT blah FROM blah WHERE blah = blah . . . "blah":"blah" "blah":"blah" "blah":"blah" 

如果您不使用sed作为传呼机,则输出如下所示:

 "blah":"blah","blah":"blah","blah":"blah" 

我相信腻子有最大数量的列,你可以指定的窗口。

对于Windows,我个人使用Windows PowerShell并将屏幕缓冲区宽度设置得相当高。 列宽保持不变,您可以使用水平滚动条查看数据。 我现在有同样的问题。

编辑:远程主机,你必须SSH进入你会使用像plink + Windows PowerShell的东西

如果列数更多,则可以使用日志logging。 这可以通过控制台中的以下命令完成,这将用所有的查询结果写入文件这是更好的

tee somepath \ filename.txt

我发现另一种方法,这将只在Windows命令提示符工作; 增加窗口的缓冲区大小,尽可能多地查看列的数量。 这取决于表中的列号。

为了补充我认为最好的答案,我也使用了less -SFX但以一种不同的方式:我喜欢将其添加到我的.my.cnf文件夹中的.my.cnf文件中,cnf文件的示例如下所示:

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

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

  • -S:单行,当行宽于屏幕时不要跳过行,而是允许向右滚动。
  • -F: 如果一个屏幕退出 ,如果内容不需要滚动,则发送到标准输出。
  • -X:没有初始化,禁用每次加载时可能configuration为输出的“less”输出。

注意:在.my.cnf文件中,不要将pager命令放在[client]关键字下面; 虽然它可能会与mysql工作, mysqldump会抱怨不认识它。