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の改行コードが付いているみたい。
ご参考まで

現在コメントは受け付けていません。