MySQLのインポートで少々はまったのでメモ。
まずは標準的なコマンド。
LOAD DATA INFILE "source.csv" INTO TABLE target_table
FIELDS TERMINATED BY ',' ENCLOSED BY '"';
ファイル名のセパレータはWindowsの場合、\になります。
そして、エラー。。
ERROR 1406 (22001): Data too long for column 'ERROR_COLUMN_NAME' at row 1
ヘッダ行もデータ行として含まれてしまうので、省く必要があります。
LOAD DATA INFILE "source.csv" INTO TABLE target_table
FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 LINES;
これで一部は成功、失敗するケースもあり。どもうカラムの列順がDBとCSVで違うらしい。この部分を修正したらなんとかインポートできた。
ただ、一つだけ
ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns
というエラーが。列数が合わないと言うんだけど、どう見ても合ってました。
仕方がないので、データを囲ってるダブルクォートを外し、ENCLOSEDを無指定にするとOKでした。
(これは未だに謎。)
2件のコメント
tfukaga · 2009-10-28 13:04
Windows VISTA + MySQL 5.1 環境で同じ現象が発生し、参考にさせてもらいました。結果的に、入れたデータをSELECT INTO OUTFILEで取り出したところ、行末コードがUnixのCSVファイルがダブルクォート付きで吐き出されて、’n’ 指定すればLOAD DATAでダブルクォート付きでも挿入されました。
stl0 · 2009-11-18 18:34
僕もvista+mysql 5.1で同じ現象が起こりました。
lines terminated by ‘n’も一部追加成功、一部失敗です。
lines terminated by ‘rn’でやってみたら、うまくできています。
どうやら、csvをexportする時、rnの改行コードが付いているみたい。
ご参考まで