【MySQL】SELECT結果をCSVにエクスポートする方法


ここではMySQLで、SELECT結果をCSVにエクスポートする方法を紹介しています。

SELECT結果をCSVにエクスポートする方法

SELECT結果をCSVにエクスポートするには、INTO OUTFILE句~を追記します。

INTO OUTFILE句~の基本的な使い方は次の通りです。

SELECT 列名 FROM 表名 INTO OUTFILE '出力先パス'
FIELDS TERMINATED BY '区切り文字'
ENCLOSED BY '囲み文字'
LINES TERMINATED BY '改行文字コード';

・FIELDS TERMINATED BY
 区切り文字を指定します。
・ENCLOSED BY
 囲み文字を指定します。
・LINES TERMINATED BY
 改行文字コードを指定します。

SELECT結果をCSVにエクスポートするSQLサンプル

次のSQLでは、「C\wk3」ファルダに「tab1.csv」という名前でCSVを出力します。

区切り文字は「,」、囲み文字は「”」、改行文字コードは「\r\n」を指定しました。

SELECT * FROM tab1 INTO OUTFILE '/wk3/tab1.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

実行すると次のようになります。

mysql> SELECT * FROM tab1 INTO OUTFILE '/wk3/tab1.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
Query OK, 6 rows affected (0.01 sec)

書き込みエラーについて

「ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement」というエラーが出ることがあります。

CSV出力先を制限している場合に発生します。

「SELECT @@global.secure_file_priv;」で取得できる値がNULLの場合は書き込みできない状態になっています。

mysql> SELECT @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| C:\wk3\                   |
+---------------------------+
1 row in set (0.00 sec)

書き込みできるようにするには、「my.ini」か「my.cnf」ファイルに出力先のフォルダ名を追加します。

上記の例でC直下のwk3フォルダを追加する場合は次のように追記します。
追記した場合、変更を反映させるにはMySQLサーバーを再起動する必要があります。

....
secure-file-priv="C:\wk3"
....