Hatena::ブログ(Diary)

130単位

2010-07-20

MySQL mysqldump+αでExcelで読めるCSV出力

MySQLからCSV出力したいって要件なんですが、Excelで読むには文字コードがShift-JISである必要があります。これを全てLinuxで行う手順です。

エクスポート手順

データベースの全テーブルをCSVエクスポート
mysqldump -u root -p --tab=/tmp --fields-terminated-by=, --fields-optionally-enclosed-by=\" --lines-terminated-by="\r\n" database
  • --tabは出力ファイルの保存先ディレクトリ
  • --fields-terminated-by はフィールド区切りの指定
  • --fields-optionally-enclosed-by は文字列の囲み指定
  • --lines-terminated-by は改行の指定
  • DB内の全テーブルに対し、拡張子.sqlのテーブル定義ファイルと拡張子.txtの中身はCSVファイルが出力される
ファイル拡張子変換
for file in *.txt; do mv $file ${file%.txt}.csv; done
文字コード変換
nkf -sLw --overwrite *.csv

参考リンク

MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump ― データベースバックアッププログラム 
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html

【 複数のファイルの拡張子を一括変更する 】 - Linuxコマンド逆引き大全:ITpro 
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231055/nkf文字コードを変換する - Linuxコマンド集:ITpro 
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/

文字コード変換コマンドnkfの使い方まとめ linux - Knowledge Database IT 
http://it.kndb.jp/entry/show/id/744

おまけ

以下ではうまくいきませんでした。

mysql -u root -p
SET NAMES SJIS;
USE database;
SELECT * INTO OUTFILE '/tmp/data.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "\r\n" FROM table;
  • 文字コードUTF-8CSVファイルが出力される
  • 「SET CHARACTER SET SJIS;」でもダメ
  • 「SET NAMES cp932;」でもダメ

サーバー文字コードが原因のような気がしますが、わかる方おしえてください><

*1:mysqldumpと重複するため無くても可

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証