このエントリーをはてなブックマークに追加


mysqlによる出力をcsvにする方法

mysqlコマンドでcsv出力する方法を以下に記します。

関連資料

csv出力

into outfile, ields terminated byを使用することによりCSV出力されます。

$ mysql -u root -p -s db1
Enter password: 
mysql> select * from t1;
a       b       c
1       2       3
4       5       6
mysql> select * from t1 into outfile "/tmp/out.csv" fields terminated by ',';
mysql> \q
$ cat /tmp/out.csv 
1,2,3
4,5,6

ダブルクオートなどで囲みたい場合

enclosed byを使用することにより値を囲む文字を指定することができます。

mysql> select * from t1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    2 |    3 |
|    4 |    5 |    6 |
+------+------+------+
2 rows in set (0.00 sec)

mysql> select * from t1 into outfile "/tmp/out.csv" fields terminated by ',' enclosed by '"';
Query OK, 2 rows affected (0.00 sec)
$ cat /tmp/out.csv 
"1","2","3"
"4","5","6"

改行コードを指定したい場合

lines terminated byを使用することにより改行コードを指定することができます。

mysql> select * from t1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    2 |    3 |
|    4 |    5 |    6 |
+------+------+------+
2 rows in set (0.00 sec)

mysql> select * from t1 into outfile "/tmp/out_crlf.csv" fields terminated by ',' lines terminated by '\r\n';
Query OK, 2 rows affected (0.00 sec)

mysql> select * from t1 into outfile "/tmp/out_lf.csv" fields terminated by ',' lines terminated by '\n';
Query OK, 2 rows affected (0.00 sec)

改行コードが0D0Aと0Aになっているのが確認できます。

$ hexdump -C out_crlf.csv 
00000000  31 2c 32 2c 33 0d 0a 34  2c 35 2c 36 0d 0a        |1,2,3..4,5,6..|
0000000e
$ hexdump -C out_lf.csv 
00000000  31 2c 32 2c 33 0a 34 2c  35 2c 36 0a              |1,2,3.4,5,6.|
0000000c

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00