MySQL 5 min read

MySQLの\Gで結果を縦に表示する ― セミコロンとの違いと-Eオプション

mysql クライアントで SQL の終わりを ; ではなく \G にすると、結果が横の表ではなく、1行ずつ「列名: 値」の形で縦に並びます。列が多い表や長い値を見るときに使います。この記事の出力は MySQL 8.4.6 で採りました。

まず見る(結論)

  • \G はセミコロンの代わり。SELECT ... \G と書けばそこで実行される
  • コマンドラインから -e で実行するときは、-E を付けると全部縦表示になる
  • \G は mysql クライアントの機能で、SQL の一部ではない。アプリケーションのコードに書いても通らない

使い方

mysql> SELECT * FROM customers LIMIT 2\G
*************************** 1. row ***************************
        id: 1
      name: a
     email: a@example.com
created_at: 2026-09-01 10:00:00
*************************** 2. row ***************************
        id: 2
      name: b
     email: b@example.com
created_at: 2026-09-02 10:00:00

行の区切りに *** 1. row *** が入り、列名が右寄せで並びます。

-e でまとめて流した SELECT 1\G; は、結果は縦表示で出て、エラーにはなりませんでした。

よく使う場面

結果が1行で、列や値が長い場合です。代表は SHOW ENGINE INNODB STATUS で、; で実行すると長いテキストが表の1マスに詰め込まれて読めません。

mysql> SHOW ENGINE INNODB STATUS\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2026-10-17 10:28:15 139808037889600 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 29 seconds
-----------------
...

ほかに SHOW CREATE TABLE 表名\G、SHOW REPLICA STATUS\G、SELECT * FROM sys.innodb_lock_waits\G なども、縦の方が読みやすくなります。

コマンドラインでは -E

mysql -e で SQL を渡すときは、-E(--vertical)を付けると縦表示になります。

$ mysql -u root -p -E -e "SELECT * FROM sugdb.customers LIMIT 1;"
*************************** 1. row ***************************
        id: 1
      name: a
     email: a@example.com
created_at: 2026-09-01 10:00:00

-e の文字列の中に \G を書いても同じ結果になります。bash では、ダブルクォートで囲んだ中に \G を書いてそのまま動きました。

アプリケーションからは使えない

\G を解釈しているのは mysql クライアント(コマンドラインツール)です。サーバーには \G を取り除いた SQL が送られます。プログラムのコードや、GUI ツールの SQL に \G を書くと、構文エラーになるか無視されます。

PostgreSQL では \x

PostgreSQL の psql で同じことをするには \x を使います。

postgres=# \x on
Expanded display is on.
postgres=# SELECT 1 AS a, 2 AS b;
-[ RECORD 1 ]
a | 1
b | 2

MySQL の \G がその1文だけに効くのに対し、psql の \x は切り替え式で、\x off にするまで続きます。