質問: mysqldumpして取得したテーブルのcsvを別のmysqlにLOAD DATA INFILEでインポートしたのですが、90万行ぐらいあるレコードのうち、122行しか読まれませんでした。(csvにはきちんと読み込まれているのを確認してあります。) 叩いたコマンドは以下のとおりです。 > > LOAD DATA LOCAL INFILE '/vagrant/data1.csv' into table SampleTable FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'; > > > この原因はどのようなことが考えられるでしょうか。なお、このcsvは別のLinux機からとったもので、windowsマシン上で作られたものではないので、 > > LINES > > TERMINATED BY '\r\n' > > > の話とは関係ないと思われます。(実際このキーワードを付けると、インポートは1件のみしかできませんでした) あと、selectを叩くと、日本語の部分が文字化けしていたため、 > > show variables like "chara%"; > > > を実行すると、案の定latin1の項目があったため、my.cnfを書き換えて、現在はlatin1の項目がないことを確認してあります。日本語が???となってしまうのですが、これはどのように対処すべきでしょうか。 追記1:なお、mysqld.logが吐かれるようにmy.cnfを書き換えたのですが、特にLOAD FILEに関するエラー等は出ておりませんでした。 追記2:用いたcsvの文字コードはutf8でした。 > > [vagrant@localhost vagrant]$ nkf -g data1.csv > > UTF-8 (LF) > > > 追記3:mysqlのバージョンは5.6.20です。
回答: CSVもUTF-8。 LOAD時もUTF-8として登録。 DBもUTF-8に変えた(再起動済?)。 とすれば、次は、TABLEがUTF8かどうかの確認ですね。 TABLEをDROP CREATEしていないければ、latin1のままになっているはず。 show table status from [table名]; もしくは show create table [table名]; で確認できます。 あとは、他の方が言うように、 登録されている122件のデータの状態を確認が必要です。 122件目も正常に登録されているか。(途中で切れていないか) 123件目に変なデータ(改行や型違い・桁オーバー)があるか。 そもそも、登録するテーブルに元々データが入っていて、主キーが被っていないか。 etc... 上記でも解決できなかった場合、 テーブル定義と 切れている部分のCSVの中身と 登録されている中身を記載して頂ければ、 より明確な答えを得られるかもしれません。