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 にするまで続きます。