多すぎるフィールドを返す MySQL SELECT をターミナルで最適に表示するにはどうすればよいですか?
-
06-09-2019 - |
質問
使っています パテ 走る:
mysql> SELECT * FROM sometable;
sometable
多くのフィールドがあるため、多くの列が端末に表示されます。フィールドは次の行に折り返されるため、列タイトルとフィールド値を並べるのは非常に困難です。
このようなデータを端末で表示するにはどのような解決策がありますか?
phpMyAdmin やその他の GUI インターフェイスにはアクセスできませんし、アクセスしたくありません。次のようなコマンドライン ソリューションを探しています。 MySQL Query の結果をテキストまたは 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;
ポケットベルを使用して
あなたは幅の線をチョップし、あなたが矢印キーでスクロールすることができ、出力を与えるそのless
オプションで-S
ページャを使用するようにMySQLを伝えることができます:
mysql> pager less -S
このように、あなたは広い出力してコマンドを実行する次回は、MySQLはless
ページャで出力を閲覧できるようになります。
mysql> SELECT * FROM sometable;
あなたはポケットベルで行われ、バックstdout
に関する定期的な出力に行きたい場合は、これを使用します:
mysql> nopager
デフォルトのページャはstdoutです。 STDOUTは、カラム制限を持っているので、出力が包まれるであろう。あなたは、出力をフォーマットするページャなど他のツールを設定することができます。 2つの方法があります。一方が他方の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にNOWRAPするvimのモードを設定します。
➜ ~ 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
は、クエリの出力が実際に 1 ページを超える場合にのみ使用されます。すべてのフラグの説明は次のとおりです。
- -S:単一行。行が画面よりも広い場合に行をスキップせず、代わりに右にスクロールできるようにします。
- -F: 1画面なら終了, 、コンテンツをスクロールする必要がない場合は、stdout に送信するだけです。
- -バツ:init なし。ロードするたびに出力するように「less」が設定されている出力を無効にします。
注記:の中に .my.cnf
ファイルは置かないでください pager
以下のコマンド [client]
キーワード;うまくいくかもしれないが mysql
良い、 mysqldump
認識しないと文句を言うでしょう。
、あなたはこのよう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の場合、私は個人的にはWindows PowerShellを使用して合理的に高い画面バッファの幅を設定します。列幅が固定されたまま、あなたがデータを見るために水平スクロールバーを使用することができます。私はあなたが今抱えている同じ問題を抱えています。
編集:あなたはあなたにSSHする必要があり、リモート・ホストでのplink +のWindows PowerShell
のようなものを使用しますあなたはファイルにクエリの結果を書き込むためにtee
を使用することができます:
tee somepath\filename.txt
あなたが同じくらいあなたが列の数を表示したいウィンドウのバッファサイズを増やすことができプロンプトWindowsコマンドを使用します。これは、テーブル内の列のなしに依存します。