mysql

Posted on:

ov はmysqlクライアントやMySQL Shellのページャーとしても使用できます。 mysqlクライアントは--pagerオプションで指定できます。

設定例

コマンドラインオプションで--pagerを指定して起動する場合。

mysql --pager='ov -w=f -H3 -F -C -d "|" --column-mode --column-rainbow --align'

~/.my.cnf設定ファイルに以下を書くことでも使用できます。

[client]
pager=ov -w=f -H3 -F -C -d "|" --column-mode --column-rainbow --align

mysql shellでは、--pagerオプションを使うか、mysqlshが起動している間に設定します。 例えば、jsモードでは、以下のコマンドで永続的に設定できます。

shell.options.setPersist("pager","ov -H1 --skip-lines 1 -C -w=false -d'|' -F --column-mode --column-rainbow --align")

SQLモードとPythonモードでは、以下のように設定します。

\option --persist pager "ov -w=f -H1 --skip-lines 1 -F -C -d '|' --column-mode --column-rainbow --align"

MySQLでの表示の問題

MySQLでクエリの結果を表示すると、以下のように表示されます。ページャーを使用するように設定している場合は、1画面分を表示して次の操作を待ちます。

最初の3行はヘッダーで、ASCIIアートで囲むように線が引かれています。各列は | で区切られています。つなぎ目のみ+になっています。 ここでは結果の行が終わると同様に線が引かれていて、その後333 rows in set (0.0105 sec)のように、結果の行数と実行時間が表示されます。

/ov/mysql/000.png /ov/mysql/000.png

ただ、1行が長い場合は、折り返されて表示されるため、「表」が見づらくなっています。ページャーを使用している場合は、折り返さない表示にでき、きれいに表示されますが、全部の列が表示されなくて横スクロールをする必要があります。

/ov/mysql/001.png /ov/mysql/001.png

これまでのページャーでも縦スクロールと横スクロールは可能でしたが、内容に関係なく、ただスクロールしていたため縦スクロール時には、列名が見えなくなり、横スクロールでは同時に見たい列が近くにある必要がありました。例えばID等は左端に表示されることが多いですが、横スクロールしてしまうと、そのID列が見えなくなってしまいます。

全部の列を表示するためには折返し表示をしないといけませんが、そうすると、どの行のどの列がどの値なのか、わかりにくくなります。

このため、横一列で表示しきれないときには\Gを使って、縦に表示する方法がありました。

この場合は、1画面で表示できる行が減ってしまう問題がありました。

ovを使用した表示

ovでは、このようなテーブル構造の表示のために便利な機能が備わっています。

まず、縦スクロールしても、最初に表示される列名が常に表示されるようにヘッダー機能があります。MySQLの結果は3行のヘッダーがあるので、-H3で指定します。

次に、列の区切り文字を指定するために、-d "|"で区切り文字を指定します。これにより、各列が|で区切られていることを認識します。 さらに、--column-modeを指定することで、選択した列をハイライト表示できます。

/ov/mysql/002.png /ov/mysql/002.png

これにより横スクロールが列単位でスクロールできるようになります。

/ov/mysql/003.png /ov/mysql/003.png

さらに、--column-rainbowを指定することで、各列の色を変えることができます。これにより、どの列がどの値なのかがわかりやすくなります。

また、--alignを指定することで、列の内容を整列させることができます。これはCSVなどの列が縦に揃っていない場合も含めて整列させる機能です。これにより縦が揃っていることが保証されるので、列を指定して、その列が常に表示される(ヘッダー列)ようにできたり、その列をに置き換えたり(縮小と呼ばれます)できます。

/ov/mysql/004.png /ov/mysql/004.png

縮小は固定された列にも適用できるため、例えば、information_schema.tablesのように、 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE…のような並びの場合は、TABLE_CATALOG、TABLE_SCHEMAが共通の値が続く場合が多く、見たいのはTABLE_NAMEとその他の項目の関連で見たいといった場合に便利です。

/ov/mysql/004.png /ov/mysql/004.png

操作は列を選択しているところで、sキーを押すと縮小されます。縮小された列は、で表示されます。もう一度sキーを押すと、縮小が解除されます。 さらに、Fキーを押すと、その列より左側のすべての列が固定され、横スクロールしても常に表示されます。

/ov/mysql/004.png /ov/mysql/004.png

ovでは折返し表示と折り返さない表示がwで簡単に切り替えられるため、折り返し表示をしつつ縮小表示も可能です(横スクロールしないため、列の固定には意味がありません)。 また、その際に行を交互に色分けすると、さらに見やすくなります(-Cオプション)。

/ov/mysql/004.png /ov/mysql/004.png

操作のアニメーション

ov-mysql-shrink ov-mysql-shrink

ヘッダーのTips

mysqlのヘッダーは3行なので、-H3で指定していますが、うち2行は区切りの線です。 もし区切りの線を常に表示しておかなくてもよいのであれば、-H1を指定して、さらに--skip-lines 1で1行目をスキップするようにします。

ov -w=f --skip-lines 1 -H1 -F -C -d "|"' --column-mode --column-rainbow --align'

ov-mysql.gif ov-mysql.gif