ものづくりのブログ

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

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文を実行してその結果をリダイレクトとか...

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