我正在使用PuTTY运行:
mysql> SELECT * FROM sometable;
sometable
有很多字段,这导致试图在终端中显示很多列。这些字段环绕到下一行,因此很难将字段名称与字段标题对齐。
在终端中查看此类数据有哪些解决方案?
我没有也不想访问phpMyAdmin-或任何其他GUI界面。我正在寻找这样的命令行解决方案:将MySQL查询结果保存到文本或CVS文件中
我正在使用PuTTY运行:
mysql> SELECT * FROM sometable;
sometable
有很多字段,这导致试图在终端中显示很多列。这些字段环绕到下一行,因此很难将字段名称与字段标题对齐。
在终端中查看此类数据有哪些解决方案?
我没有也不想访问phpMyAdmin-或任何其他GUI界面。我正在寻找这样的命令行解决方案:将MySQL查询结果保存到文本或CVS文件中
Answers:
用\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
...
G
必须将其大写。
SELECT * FROM sometable\G
内容时,会将字符串发送到mysql命令行客户端,而不是Windows,这就是为什么G
区分大小写的原因
sh: 1: less: not found 44 rows in set (0.01 sec)
您可能还会发现此功能有用(仅非Windows):
mysql> pager less -SFX
mysql> SELECT * FROM sometable;
这将通过less
命令行工具使用管道输出-使用这些参数-将为您提供表格输出,可使用光标键在水平和垂直方向上滚动。
q
按下键退出此视图,这将退出该less
工具。
/
然后写入搜索字符串(也可以是正则表达式)来完成搜索,然后按Enter。按向前搜索n
,按N
(Shift + n
)向后搜索。
less
可以做更多更酷的事情。使用&
可以进一步使用正则表达式过滤(仅显示匹配的行)结果。除了/
搜索(此操作仍会导致突出显示)之外,此功能也起作用。通过&
再次点击然后按回车键来重置过滤器。
尝试启用垂直模式,\G
而不是使用来执行查询;
:
mysql> SELECT * FROM sometable \G
您的结果将以垂直模式列出,因此每个列值将打印在单独的行上。输出将更窄,但显然更长。
\G
,您也可以\g
代替;
,我知道,谁会这样做,但是它为\G
最初工作的原因提供了背景信息。
mysql
的ego
命令从mysql
的help
命令:
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
您可以使用--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 | |
+--------------+--------------+------+-----+---------+----------------+
默认的寻呼机是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模式以在.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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
pager cut -c -200
。这里接受更多的答案需要我下载不必要的依赖项。
只是为了补充我认为最好的答案,我还使用less -SFX
了另一种方式:我喜欢将其添加到.my.cnf
主文件夹中的文件中,示例cnf文件如下所示:
[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'
用这种方式的好处是,less
仅当查询的输出实际上超过一页时才使用,这里是所有标志的解释:
注意:在.my.cnf
文件中不要将pager
命令放在[client]
关键字下面;尽管可能效果mysql
不错,但mysqldump
会抱怨无法识别它。
less
它将始终停留在输出的第一行。
我写了-https pspg
: //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]>选择now(); MariaDB [sakila]>从nicer_but_slower_film_list限制100中选择*;
您可以用来tee
将查询结果写入文件:
tee somepath\filename.txt
使用Windows命令提示符,可以增加窗口的缓冲区大小,以使您可以看到列数。这取决于表中的列数。