6

ファイルにレコードがあり、データベース.CSVにインポートしたいと思いMySQLます。

インポートするたびに.CSVメッセージImport has been successfully finished...が表示されますが、データベースに挿入されるのは114レコードのうち79レコードのみです。

.CSV411レコードのファイルをインポートしようとすると、282だけが挿入されます。411レコードを取得したCSVファイルには、Active and Sold114レコードがアクティブである2つのカテゴリのレコードが含まれています。

誰かがこの種の問題を抱えていますか?もしそうなら、何をすべきですか?

4

3 に答える 3

1

私はphpで自分のcsvインポーターを書きました。phpコマンドfgetcsvを使用してcsvファイルを読み取り、次にmysql挿入コマンドをループで使用します。

$ handle = fopen($ this-> file、 "r");
$ i = 0;
$ delimiter =($ this-> fieldDelimiter =='TAB')?chr(9):$ this-> fieldDelimiter;
while(($ data = fgetcsv($ handle、10000、$ delimiter))!== FALSE)
{{
     $ mydata [] = $ data;
}
fclose($ handle);
リセット($ mydata);
if($ this-> CSVhasTitle)
{{
      $ mydata = array_slice($ mydata、1); //最初の行を削除します
}

次に、配列をループしてmysqlinsertを使用します。

foreach($ mydata as $ value)
{{
     INSERT INTO $ table(...)VALUES(....)
}

しかし、ループの前に正確な列名を配列に追加します。私はすべてのcolumnamesの配列を持っています。

于 2012-08-01T21:27:04.723 に答える
1

私もこの問題を抱えていました。少し古く、これらの推奨事項は一方向に進んでいますが、ここで私が見つけた解決策です。私は大規模なデータベースを作成してインポートしていましたが、同じことが起こりました.試行錯誤の後、何らかの方法で割り当てられたキーが作成されていることに気付きました(新しいスキンを使用していて、常に古いスキンを使用していたため、認識しませんでした)。どういうわけか私によって割り当てられていないキーを取り出し、プライマリだけを残してブームを起こし、データのアップロードを吸収しました。また、現在表示に問題があり、質問に関してリクエストがタイムアウトしました。ビューアの表示を数千にまで押し上げましたが、スタックしてしまい、CP を使用してどこにも構成ファイルにアクセスできません。そのため、私の懸念を読み、最後にそれを上書きするのを怠るカスタマーサポートをハングアップさせ、ホストするように、可能な限りDROPではなくテーブル全体を削除する必要があります。過負荷でフリーズするように SQL を実行することさえありません。したがって、考えるべきことは、テーブル ビューを下げておくことです。これは、私の場合のように最悪です。17,000 のレコードを視覚的にすばやく調べて、.csv が正しいかどうかを確認する必要があります。とにかく私にとってより理にかなっているコントロールで正しい。

于 2012-08-16T17:19:19.130 に答える
0

CSV ファイルを見てみましょう。のようなものが含まれている可能性が非常に高い

1,2,「一部のデータ」,1
2,5,"カンマ付きのデータ",2

COLUMNS OPTIONALLY ENCLOSED BY '"' (SINGLE_QUOTE DOUBLE_QUOTE SINGLE_QUOTE) を指定しないと、2 行目、3 列目の文字列データに埋め込まれたカンマが正しくインポートされません。

CSV をチェックして、使用されている囲み文字を確認し、それを phpmyadmin インターフェイスで指定します。

于 2012-08-01T21:32:52.273 に答える