コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

MySQLのコマンドライン実行( -e , --execute)はファイルに出力するとタブ区切りのTSV形式になる

原理を知らんかったんで調べてみたメモ

環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.24, for osx10.14 (x86_64) using  EditLine wrapper

やり方

--execute もしくは -e を使うとコマンドラインMYSQLのクエリを実行できる。

その結果をパイプして出力するとtab区切りで出てくる

$mysql --execute "何かクエリ;" > 出力したいファイル

$ mysql -uroot -Dsample_app_development -e "SELECT id, name FROM users ORDER BY id DESC LIMIT 3;"

とすると以下のように出力される

$ mysql -uroot -Dsample_app_development -e "SELECT id, name FROM users ORDER BY id DESC LIMIT 3;"
+----+------+
| id | name |
+----+------+
| 15 | Goto |
| 14 | Sato |
| 13 | Ziro |
+----+------+
$

これをファイルに出力すると以下のように出力される

$mysql -uroot -Dsample_app_development -e "SELECT id, name FROM users ORDER BY id DESC LIMIT 3;" > sample.tsv
id    name
15  Goto
14  Sato
13  Ziro

原理

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.1.1 mysql のオプション 曰く

--execute=statement, -e statement

ステートメントを実行して、終了します。デフォルトの出力形式は、--batch で生成されるものと同様です。

とあり、batchをみると

--batch, -B

カラム区切り文字としてタブを使用し、各行を新しい行に出力します。このオプションでは、mysql は履歴ファイルを使用しません。

ということで、batchのデフォルトがタブ区切りだからこの形式になる。

関連リンク