ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

MySQL でテーブル情報を CSV ファイルに出力する方法

データベースに接続してCSVファイルを取得したいことが度々あるのですが、その度にやり方を忘れてしまっているのでここにメモします。

MySQLの場合は、SELECT 文に "INTO OUTFILE" を記述することで CSV ファイルを出力することができます。

CSV出力の構文

デフォルト
SELECT {{カラム名}} FROM {{テーブル名}} INTO OUTFILE {{出力ファイルパス}};
オプション指定

オプションを付けること区切り文字や改行コードを指定することができます。

SELECT 
  {{カラム名}} 
FROM 
  {{テーブル名}} 
INTO OUTFILE {{出力ファイルパス}};
FIELDS
  TERMINATED BY '{{区切り文字}}'
  ENCLOSED BY '{{フィールドを囲む文字}}'
LINES
  TERMINATED BY '{{改行コード}}';

オプションの補足

FIELDS

TERMINATED BY

  • 区切り文字を指定
  • デフォルトではタブ区切り

ENCLOSED BY

  • フィールドを囲む文字の指定
  • デフォルトは囲み文字なし
LINES

TERMINATED BY

  • 改行コードを指定
  • デフォルトはLF(\n)

おまけ

文字コード指定

文字コードを指定する場合は" INTO OUTFILE "の後に "CHARACTER SET" という句を追加します。

SELECT 
  {{カラム名}} 
FROM 
  {{テーブル名}} 
INTO OUTFILE {{出力ファイルパス}}
CHARACTER SET '{{文字コード}}';
mysqldump で csv 出力

mysqldump というコマンドを使って CSV を出力します。
CSV 形式でダンプする場合は –tab オプションに加えて、 –fields-terminated-by= を指定します。

$ mysqldump -u{{ユーザ名}} -p --tab=/tmp --fields-terminated-by=, {{DB名}} {{テーブル名(省略可能)}}
Enter password:パスワードを入力
sed コマンドを使って csv 出力

SQL 文を実行してその結果をリダイレクトして sed で処理させる方法です。

$ mysql -B -u {{ユーザ名}} -p {{パスワード}}  {{DB名}}-h {DB_HOST} -e "SELECT * FROM {{テーブル名}};" \ | sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > {{CSVファイル名}}