如何最好地显示在终端MySQL选择返回太多的领域?
-
06-09-2019 - |
题
我在使用 腻子 运行:
mysql> SELECT * FROM sometable;
sometable
有许多领域和这种结果在很多列试图将显示在终端。该领域包裹到下一个线所以它是非常困难的行列标题领域的价值观。
什么方案都是为了查看这些数据在终端?
我没有,也不要访问的头文件或任何其他GUI接口。我在寻找的命令行的解决方案,例如: 保存MySQL查询结果纳入文本或CVS文件
解决方案
终止与\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
命令行工具outut其中 - 与这些参数 - 会给你一个表格输出,可以水平和垂直地使用光标键来滚动
通过敲击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 | |
+--------------+--------------+------+-----+---------+----------------+
使用mysql
的ego
命令
从mysql
的help
命令:
自我(\ 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
默认寻呼机是标准输出。标准输出具有列的限制,因此,输出将被缠绕。您可以设置其它的工具如寻呼机格式化输出。有两种方法。一个是限制柱,另一种是对处理它在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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
只是为了补充答案,我认为最好的,我也使用 less -SFX
但在一个不同的方式:我喜欢到我的广告 .my.cnf
文件在我家里的文件夹,例cnf文件看起来是这样的:
[client]
user=root
password=MyPwD
[mysql]
pager='less -SFX'
对好事有关具有这样说,是, less
只时所使用的输出的查询是实际上超过一页长,这是解释的标志:
- -S:单个线,不要跳过行在线更宽屏幕上,而不是允许滚动的权利。
- -F: 退出,如果一个屏幕, 如果内容不需要然后就滚动发送到stdout。
- -X:没有init,禁止任何产出"不"可能具有构成为输出每一次装载。
注:在 .my.cnf
文件不放的 pager
下命令的 [client]
关键词;虽然它可能有工作 mysql
好了, mysqldump
会抱怨不承认它。
如果您正在交互使用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]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen PAGER set to 'pspg -s 14 -X --force-uniborder --quit-if-one-screen' MariaDB [sakila]> select now(); MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;
我相信腻子有你可以指定窗口列的最大数量。
有关视窗我个人使用Windows PowerShell和设置屏幕缓冲器宽度相当高。列的宽度保持固定,可以使用水平滚动条看到的数据。我现在遇到了同样的问题。
编辑:对于您必须SSH到你会使用类似砰砰+的Windows PowerShell远程主机
您可以使用tee
写你的查询到一个文件的结果是:
tee somepath\filename.txt
使用Windows命令提示符可以增加窗口的缓冲区大小尽可能多的你想看到的列数。这依赖于没有列在表中。