MySQL SQL結果をINTO OUTFILEを使用せずCSV取得
概要
MySQL SELECT 文の結果を csv で取得する際
以下のように CLI 上で実行することで取得できます。
| 1 | $ mysql -u <user> -p<password> <db_name> | 
ですが、mysql ログインユーザ
以下のようなエラーで出力できません。
| 1 | RROR 1 (HY000): Can't create/write to file '/tmp/output.csv' (Errcode: 13) | 
FILE の READ/WRITE 権限を付与すれば問題ないですが
権限周りをいじりたくないときなどあるかと思います。
本番環境の DB で権限周りがブラックボックス化していて
FLUSH PRIVILEGES すると何か障害が出るんじゃないかとか汗
その際に実施したことを以下まとめました。
考え方
TXT として取得して sed で csv ファイルに加工する、
という方法で実行しています。
例) 以下のような SQL 実行結果を取得したとすると
| 1 | $ less output.txt | 
↓ Excel で表示されるように加工すると
| 1 | $ less output.txt | 
手順
query 結果を ouput.txt に出力
| 1 | $ mysql -u <user> -p<password> <db_name> -e"<query>" > output.txt | 
Excel 用に加工
- 力技
| 1 | // 各行の一番前(「^」)に「"」を付加 | 
文字コード変更
この CSV を利用する方(提出先)の方の文字コードに合わせます。
提出先では Shift JIS がデフォルトとのことで そこに変更します。
| 1 | $ nkf -g output4.txt | 
| 1 | $ nkf -sLw output4.txt > output.csv | 
これで INTO OUTFILE を利用せず CSV ファイルを取得できました。
ouput.csv
おまけ
ファイル名に日付をつける。
| 1 | $ mv output.csv output_`date '+%Y%m%d'`.csv | 
| 1 | $ ls | 
MySQL SQL結果をINTO OUTFILEを使用せずCSV取得
https://kenzo0107.github.io/2016/03/13/2016-03-14-mysql-output-csv-without-outfile/
