【DB】【CSV】CSVに泣く前に見直したいたった3つのこと。
えっ??今までの俺のCSV力って何だったん?
というぐらい今週はCSVと戦いました。
次はサクッと出来るように
(出来ないとまずい)
勉強になったことを纏めたいと思います。
1・取得したカラムから改行を削除する方法
これはどういった時に使うかというとHTMLのタグや「"\"」(バックスラッシュ)、
といったデータを格納しているカラムも取得対象の場合です。
Replace(Replace({取得対象のカラム名}, Char(13), ""),Char(10), "")
SELECT e.id ,e.created_at, Replace(Replace(j.name, Char(13), ""),Char(10), "") FROM g08m11 as e INNER JOIN jobs j ON e.job_id = j.id WHERE e.created_at BETWEEN '2014-03-01 00:00:00' AND '2014-03-31 23:59:59' ORDER BY e.created_at asc
2・MySQLの結果をCSVに出力する
今までMySQLからCSVを出力する時は「MySQLワークベンチ」から出力していたのですが
今回はそれが使えなかったのでSQLにて出力しました。
INTO OUTFILE "{出力したいファイル名}" FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '”';
SELECT e.id ,e.created_at, Replace(Replace(j.name, Char(13), ""),Char(10), "") FROM g08m11 as e INNER JOIN jobs j ON e.job_id = j.id WHERE e.created_at BETWEEN '2014-03-01 00:00:00' AND '2014-03-31 23:59:59' ORDER BY e.created_at asc INTO OUTFILE "/tmp/g08m11.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '”';
3・文字コードの変換
CSVファイルで出力する場合はみなさんご存知の通り、Excelでも開きたいというニーズがあります。
しかし、上記の2などで出力したCSVは「UTF-8コード」で出力されて、
Excelのデフォルトの文字コードは「Shift-JIS」。
そうです。
文字化けが発生するのです。
それを防ぐため、文字コードを変換する必要があります。
「nkf」で一括変更!
今回はHomebrewで導入。
g08m11$ brew install nkf ==> Downloading http://dl.sourceforge.jp/nkf/53171/nkf-2.1.2.tar.gz ######################################################################## 100.0%==> Patchingpatching file Makefile==> make==> make install/usr/local/Cellar/nkf/2.1.2: 4 files, 252K, built in 2 seconds
ちゃんと使えそうかチェック
g08m11$ which nkf /usr/local/bin/nkf
nkfのオプションざっくりまとめ
文字コードには
主に JIS (ISO-2022-JP)、SJIS (Shift_JIS)、EUC-JP の3種類がある。
普通の UNIX では EUC-JP (ただしメール・ネットニュースでは JIS)、
Windows や Mac では Shift_JIS がよく使われます。
使い方
「-j 」JIS (ISO-2022-JP) コードに変換