web-dev-qa-db-ja.com

ターミナルに多くのフィールドを返すMySQL SELECTを最適に表示するにはどうすればよいですか?

私は PuTTY を使用して実行しています:

mysql> SELECT * FROM sometable;

sometableには多くのフィールドがあり、これにより、多くの列が端末に表示されます。フィールドは次の行に折り返されるため、列タイトルとフィールド値を並べることは非常に困難です。

端末でそのようなデータを表示するためのソリューションは何ですか?

PhpMyAdminやその他のGUIインターフェースへのアクセス権も持っていません。次のようなコマンドラインソリューションを探しています。 MySQLクエリの結果をテキストまたはCVSファイルに保存

228
Chris Jacob

\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
          ...
424
Rytmis

また、これは便利かもしれません(非Windowsのみ):

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

これは、lessコマンドラインツールを介して出力をパイプ処理し、これらのパラメーターを使用して、カーソルキーで水平および垂直にスクロールできる表形式の出力を提供します。

qキーを押してこのビューを終了すると、lessツールが終了します。

310

\Gの代わりに;を使用してクエリを実行し、垂直モードを有効にしてみてください。

mysql> SELECT * FROM sometable \G

結果は垂直モードで一覧表示されるため、各列の値は個別の行に出力されます。出力は狭くなりますが、明らかにはるかに長くなります。

41
Swiety

--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    |                |
+--------------+--------------+------+-----+---------+----------------+
22
davidmh

mysqlegoコマンドを使用する

mysqlhelpコマンドから:

ego(\ G)コマンドをmysqlサーバーに送信し、結果を垂直に表示します。

したがって、\Gselectに追加すると、非常にきれいな垂直出力を取得できます。

mysql> SELECT * FROM sometable \G;

ページャーを使用する

MySQLにlessページャーを-Sオプションと共に使用して、幅の広い行を切り取り、矢印キーでスクロールできる出力を提供するように指示できます。

mysql> pager less -S

したがって、次回、ワイド出力でコマンドを実行すると、MySQLはlessページャーで出力を閲覧できます。

mysql> SELECT * FROM sometable;

ページャーが完了し、stdoutの通常の出力に戻りたい場合は、これを使用します。

mysql> nopager
17
Ronan Boiteau

デフォルトのポケットベルはstdoutです。 stdoutには列の制限があるため、出力はラップされます。他のツールをページャーとして設定して、出力をフォーマットできます。 2つの方法があります。 1つは列を制限すること、もう1つは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>

出力は完了していません。コンテンツは画面に収まります。

2番目:

.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
+-----------+------------+------------+-------------+-------------+----------
~
~
~
7
hyang0

私が最高だと思った答えを補完するために、私はless -SFXも使用しますが、別の方法で:ホームフォルダの.my.cnfファイルに追加したいので、cnfファイルの例は次のようになります:

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

このようにすることの良い点は、lessがクエリの出力が実際に1ページ以上の場合にのみ使用されることです。すべてのフラグの説明は次のとおりです。

  • -S:単一行。行が画面よりも広い場合に行をスキップせず、代わりに右にスクロールできます。
  • -F:1画面の場合は終了、コンテンツをスクロールする必要がない場合は、stdoutに送信します。
  • -X:初期化なし。ロードするたびに出力するように構成されている可能性のある「少ない」出力を無効にします。

注:.my.cnfファイルでは、[client]キーワードの下にpagerコマンドを置かないでください。 mysqlでうまく動作するかもしれませんが、mysqldumpはそれを認識しないと文句を言うでしょう。

5
santiago arizti

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"
2
Paul Ericson

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]> select now(); 
 MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100; 
1
Pavel Stehule

teeを使用して、クエリの結果をファイルに書き込むことができます。

tee somepath\filename.txt
0
Sathishkumar

Windowsコマンドプロンプトを使用すると、列の数を表示したいだけウィンドウのバッファサイズを増やすことができます。これは、テーブル内の列数に依存します。

0
Sathishkumar

PuTTYには、ウィンドウに指定できる列の最大数があると思います。

Windowsの場合、私は個人的にWindows PowerShellを使用し、画面バッファーの幅を適度に高く設定します。列幅は固定されたままで、水平スクロールバーを使用してデータを表示できます。私はあなたが今持っている同じ問題を抱えていました。

編集:SSHを使用する必要があるリモートホストの場合、plink + Windows PowerShellなどを使用します。

0
Patrick Gryciuk