【MySQL】CSVでエクスポート(テーブル単位 or クエリの結果を丸ごと)
CSVでテーブルのデータをエクスポートする。
今回はmysqlコマンドで、SELECT … INTO OUTFILE … 文を使ってみる。
SELECT … INTO OUTFILE … を実際に実行してみた様子
mysql> SELECT * INTO OUTFILE'/tmp/order_info.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES STARTING BY '' TERMINATED BY '\r\n' FROM order_info; Query OK, 271245 rows affected (6.07 sec)
これで、/tmp/order_info.csvにデータが書き出される。
とりあえずポイント
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES STARTING BY '' TERMINATED BY '\r\n'
を指定するとExcelのCSVっぽく出力される。指定しないとタブ区切りで出力される。- mysqlの実行ユーザーでファイルを作るので、/tmp などmysql実行ユーザーが書き込める場所に書き出す。
- 既存のファイルは絶対上書きしない仕様だそうなので、新規ファイルを指定する。
CSVが文字化けしたら
現在の接続での文字の扱い、対象のテーブルの文字コードがどうなっているか確認する。
mysql> show variables like 'char%'; +----------------+-------- | Variable_name | Value +----------------+-------- | character_set | ujis ... ...
mysql> show table status; +------------+--------+---------+------------+--------+-...--+-------------+---------------- | Name | Engine | Version | Row_format | Rows | ... | Check_time | Collation +------------+--------+---------+------------+--------+-...--+-------------+---------------- | A | InnoDB | 9 | Fixed | 5 | ... | NULL | utf8_general_ci ... ...
ずれがあったら文字化けするので、
SET NAMES utf8;
や
SET NAMES binary;
などでクライアント側を調整のうえで SELECT … INTO OUTFILE … する。
ちなみに、mysqldumpコマンドでも -T オプションでCSV形式の出力ができる。
コメント