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

StackOverflow https://stackoverflow.com/questions/924729

質問

使っています パテ 走る:

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

mysqlegoコマンドを使用して

mysqlhelpコマンドから:

  

自我(\ G)MySQLサーバにコマンドを送信し、表示結果垂直

だからあなた\Gselectを追加することにより、あなたは非常にクリーンな垂直出力を得ることができます

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 認識しないと文句を言うでしょう。

あなたが対話的に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の場合、私は個人的にはWindows PowerShellを使用して合理的に高い画面バッファの幅を設定します。列幅が固定されたまま、あなたがデータを見るために水平スクロールバーを使用することができます。私はあなたが今抱えている同じ問題を抱えています。

編集:あなたはあなたにSSHする必要があり、リモート・ホストでのplink +のWindows PowerShell

のようなものを使用します

あなたはファイルにクエリの結果を書き込むためにteeを使用することができます:

tee somepath\filename.txt

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top