mysql
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)
のように、結果の行数と実行時間が表示されます。
ただ、1行が長い場合は、折り返されて表示されるため、「表」が見づらくなっています。ページャーを使用している場合は、折り返さない表示にでき、きれいに表示されますが、全部の列が表示されなくて横スクロールをする必要があります。
これまでのページャーでも縦スクロールと横スクロールは可能でしたが、内容に関係なく、ただスクロールしていたため縦スクロール時には、列名が見えなくなり、横スクロールでは同時に見たい列が近くにある必要がありました。例えばID等は左端に表示されることが多いですが、横スクロールしてしまうと、そのID列が見えなくなってしまいます。
全部の列を表示するためには折返し表示をしないといけませんが、そうすると、どの行のどの列がどの値なのか、わかりにくくなります。
このため、横一列で表示しきれないときには\G
を使って、縦に表示する方法がありました。
この場合は、1画面で表示できる行が減ってしまう問題がありました。
ovを使用した表示
ov
では、このようなテーブル構造の表示のために便利な機能が備わっています。
まず、縦スクロールしても、最初に表示される列名が常に表示されるようにヘッダー機能があります。MySQLの結果は3行のヘッダーがあるので、-H3
で指定します。
次に、列の区切り文字を指定するために、-d "|"
で区切り文字を指定します。これにより、各列が|
で区切られていることを認識します。
さらに、--column-mode
を指定することで、選択した列をハイライト表示できます。
これにより横スクロールが列単位でスクロールできるようになります。
さらに、--column-rainbow
を指定することで、各列の色を変えることができます。これにより、どの列がどの値なのかがわかりやすくなります。
また、--align
を指定することで、列の内容を整列させることができます。これはCSVなどの列が縦に揃っていない場合も含めて整列させる機能です。これにより縦が揃っていることが保証されるので、列を指定して、その列が常に表示される(ヘッダー列)ようにできたり、その列を…
に置き換えたり(縮小と呼ばれます)できます。
縮小は固定された列にも適用できるため、例えば、information_schema.tables
のように、 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE…のような並びの場合は、TABLE_CATALOG、TABLE_SCHEMAが共通の値が続く場合が多く、見たいのはTABLE_NAMEとその他の項目の関連で見たいといった場合に便利です。
操作は列を選択しているところで、s
キーを押すと縮小されます。縮小された列は、…
で表示されます。もう一度s
キーを押すと、縮小が解除されます。
さらに、F
キーを押すと、その列より左側のすべての列が固定され、横スクロールしても常に表示されます。
ov
では折返し表示と折り返さない表示がw
で簡単に切り替えられるため、折り返し表示をしつつ縮小表示も可能です(横スクロールしないため、列の固定には意味がありません)。
また、その際に行を交互に色分けすると、さらに見やすくなります(-C
オプション)。
操作のアニメーション
ヘッダーの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'