MySQLのクエリ結果をCSV形式で出力するには?
LinuxのコマンドラインからMySQLのクエリを実行して、その結果をCSV形式で出力する簡単な方法はありますか?
今やっているのはこんな感じです。
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
引用符で囲まなければならない列がたくさんある場合や、エスケープしなければならない引用符が結果に含まれている場合は、面倒になります。
1112
3
From http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
このコマンドを使用すると、カラム名はエクスポートされません。
また、
/var/lib/mysql-files/orders.csv
は MySQL を実行している server 上にあることに注意してください。MySQLプロセスが実行されているユーザは、選択されたディレクトリへの書き込み権限を持っていなければ、コマンドは失敗します。リモートサーバー(特にHerokuやAmazon RDSのようなホストマシンや仮想化マシン)からローカルマシンに出力を書き込みたい場合、このソリューションは適していません。
mysql --batch, -B としています。
このモードでは、タブ区切りのファイルが出力されます。カンマ(またはカンマを含む文字列)はエスケープされないので、デリミタをカンマに変更するのは簡単ではありません。
上記の回答の代わりに、CSVエンジンを使用するMySQLテーブルを用意することもできます。
そうすれば、ハードディスク上に常にCSV形式のファイルがあり、それを処理せずにコピーすることができます。