我正在使用PuTTY运行:
mysql> SELECT * FROM sometable;
sometable
有很多字段,这会导致许多列试图在终端中显示。字段换行到下一行,因此很难将列标题与字段值对齐。
在终端中查看此类数据有哪些解决方案?
我没有也不想访问 phpMyAdmin - 或任何其他 GUI 界面。我正在寻找这样的命令行解决方案:Save MySQL Query results into text or CVS file
我正在使用PuTTY运行:
mysql> SELECT * FROM sometable;
sometable
有很多字段,这会导致许多列试图在终端中显示。字段换行到下一行,因此很难将列标题与字段值对齐。
在终端中查看此类数据有哪些解决方案?
我没有也不想访问 phpMyAdmin - 或任何其他 GUI 界面。我正在寻找这样的命令行解决方案:Save MySQL Query results into text or CVS file
\G
用代替 终止查询;
。例如:
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):
mysql> pager less -SFX
mysql> SELECT * FROM sometable;
这将通过命令行工具管道输出less
- 使用这些参数 - 将为您提供可以使用光标键水平和垂直滚动的表格输出。
按 键离开此视图q
,这将退出该less
工具。
尝试启用垂直模式,\G
用于执行查询而不是;
:
mysql> SELECT * FROM sometable \G
您的结果将以垂直模式列出,因此每列值将打印在单独的行上。输出会更窄,但显然更长。
mysql
'sego
命令从mysql
的help
命令:
ego (\G) 向mysql服务器发送命令,垂直显示结果。
因此,通过将 a 附加\G
到您的select
,您可以获得非常干净的垂直输出:
mysql> SELECT * FROM sometable \G
您可以告诉 MySQL 使用less
分页器及其-S
选项,该选项可以截断宽行并为您提供可以使用箭头键滚动的输出:
mysql> pager less -S
因此,下次您运行具有宽输出的命令时,MySQL 将允许您使用less
分页器浏览输出:
mysql> SELECT * FROM sometable;
如果您已完成寻呼机并想返回到 上的常规输出stdout
,请使用以下命令:
mysql> nopager
您可以使用--table
or-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 | |
+--------------+--------------+------+-----+---------+----------------+
为了补充我认为最好的答案,我也使用less -SFX
了不同的方式:我喜欢将它添加到我.my.cnf
的主文件夹中的文件中,示例 cnf 文件如下所示:
[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'
这样做的好处是,less
仅当查询的输出实际上超过一页时才使用,这里是所有标志的解释:
注意:在.my.cnf
文件中不要把pager
命令放在[client]
关键字下面;虽然它可能mysql
很好用,但mysqldump
会抱怨不承认它。
默认寻呼机是标准输出。标准输出具有列限制,因此输出将被包装。您可以将其他工具设置为寻呼机来格式化输出。有两种方法。一是限制列,二是在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>
输出不完整。内容适合您的屏幕。
第二个:
在 .vimrc 中将 vim 模式设置为 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"
我写了pspg
- https://github.com/okbob/pspg
这个寻呼机是为表格数据设计的——也支持 MySQL。
MariaDB [sakila]> 寻呼机 pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER 设置为 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' MariaDB [sakila]> 现在选择(); MariaDB [sakila]> select * from nicer_but_slower_film_list 限制 100;
我相信腻子有你可以为窗口指定的最大列数。
对于 Windows,我个人使用 Windows PowerShell 并将屏幕缓冲区宽度设置得相当高。列宽保持固定,您可以使用水平滚动条查看数据。我遇到了和你现在一样的问题。
编辑:对于您必须通过 SSH 连接的远程主机,您可以使用 plink + Windows PowerShell 之类的东西
您可以使用tee
将查询结果写入文件:
tee somepath\filename.txt
使用 Windows 命令提示符,您可以根据需要增加窗口的缓冲区大小以查看列数。这取决于表中的列数。