0

OK、CSVファイルをアクセスからMySQLにインポートするために、過去1時間読んで試してみましたが、何を試しても正しく実行できません.

私のテーブルは次のようなものです:

+-----------------+-------------
| Field           | Type
+-----------------+-------------
| ARTICLE_NO      | varchar(20)
| ARTICLE_NAME    | varchar(100)
| SUBTITLE        | varchar(20)
| CURRENT_BID     | varchar(20)
| START_PRICE     | varchar(20)
| BID_COUNT       | varchar(20)
| QUANT_TOTAL     | varchar(20)
| QUANT_SOLD      | varchar(20)
| STARTS          | datetime
| ENDS            | datetime
| ORIGIN_END      | datetime
| SELLER_ID       | varchar(20)
| BEST_BIDDER_ID  | varchar(20)
| FINISHED        | varchar(20)
| WATCH           | varchar(20)
| BUYITNOW_PRICE  | varchar(20)
| PIC_URL         | varchar(20)
| PRIVATE_AUCTION | varchar(20)
| AUCTION_TYPE    | varchar(20)
| INSERT_DATE     | datetime
| UPDATE_DATE     | datetime
| CAT_1_ID        | varchar(20)
| CAT_2_ID        | varchar(20)
| ARTICLE_DESC    | varchar(20)
| DESC_TEXTONLY   | varchar(20)
| COUNTRYCODE     | varchar(20)
| LOCATION        | varchar(20)
| CONDITIONS      | varchar(20)
| REVISED         | varchar(20)
| PAYPAL_ACCEPT   | tinyint(4)
| PRE_TERMINATED  | varchar(20)
| SHIPPING_TO     | varchar(20)
| FEE_INSERTION   | varchar(20)
| FEE_FINAL       | varchar(20)
| FEE_LISTING     | varchar(20)
| PIC_XXL         | tinyint(4)
| PIC_DIASHOW     | tinyint(4)
| PIC_COUNT       | varchar(20)
| ITEM_SITE_ID    | varchar(20)

私のデータは現在セミコロンで区切られています.csvファイルの行の例は次のとおりです。

"110268889894";"ORIGINAL 2008 ED HARDY GÜRTEL* MYSTERY LOVE  * M *BLACK";"";0,00 €;0,00 €;0;1;0;8.7.2008 17:18:37;5.11.2008 16:23:37;6.10.2008 17:23:37;29;0;0;0;125,00 €;"";0;2;6.10.2008 16:21:51;6.10.2008 14:19:08;80578;0;;0;77;"";0;0;1;0;-1;0,00 €;0,00 €;0,00 €;0;0;0;77
"110293328957";"Orig. Ed Hardy Shirt - Tank Top - Gr. XS- OVP/NEU";"";25,05 €;0,00 €;7;1;0;27.9.2008 06:26:27;6.10.2008 18:26:21;6.10.2008 18:26:21;49;0;0;0;0,00 €;"";0;1;6.10.2008 16:21:56;6.10.2008 16:33:20;31058;0;;0;77;"";1;0;0;0;-1;0,00 €;0,00 €;0,00 €;0;0;0;77   

シンプルな PHP ページを使用してテーブル データを出力していますが、完全に間違っています。テキストのみの単純なテーブルが完全に表示されるため、問題は PHP ページにはありません。間違ったフィールド タイプを選択したのか、それとも列が一致していないのか疑問に思っていますが、そうなる理由はわかりません。データが HTML として表示されようとしているために、何かが起こっている可能性はありますか?

私はこの質問をできるだけ具体的にするように努めており、他の人が示唆しているように人々に私に代わって質問することは求めていませんが、正直なところ、どこに問題があるのか​​ わかりません.

編集: PHP を使用してデータを表示しようとすると、現時点では、ページが完全に黒く、一部のテーブル セルには境界線があり、他のセルには境界線がありません。別の区切り文字を試すと、フィールドが列と一致しません。開始フィールドが正しく表示されませんでした。

次のコマンドを使用して、CSV ファイルからファイルをロードしています。

LOAD DATA LOCAL INFILE 'C:/Dokumente und Einstellungen/hom/Desktop/tblAuction.txt' INTO TABLE Auctions FIELDS TERMINATED BY '\"' LINES TERMINATED BY '\n';

現時点で主な問題ではないstartsフィールドを除いて、私が知る限り、DBでは問題ないようです。

edit2:結果をシリアル化しました。これが画面に出力されたものです。

i:0;

それが何を意味するのか、私にはまったくわかりません。

edit3:区切り文字で終了するを更新しようとしましたが、\" を ; に変更した後、データが正しい列に配置されないなどの問題が残っています..、私が見逃したものを理解していません.

4

3 に答える 3

5

フィールドは「;」で終了します "\"" ではありません。変更

 FIELDS TERMINATED BY '\"'

 FIELDS TERMINATED BY ';'

これも追加できます:

 OPTIONALLY ENCLOSED BY '"'

これは、TERMINATED BY 句でやろうとしていたことだと思います。

于 2008-11-05T13:54:26.950 に答える
0

このエラーは、DB 内のデータの破損、DB からデータを取得するためのクエリ、または出力方法が原因で発生する可能性があります。これらの原因のいずれかに絞り込む必要があります。

  1. 選択しているテーブルを直接見てください。これにはphpMyAdminをお勧めします。
  2. クエリの結果を画面に直接出力します。非常に粗雑ですが実行可能な方法は、それをシリアル化することです:echo serialize($result);
  3. エラーの原因として 1 と 2 を除外できる場合、問題はクエリの処理にあるはずです。

原因がどこにあるかを特定すると、原因が何であるかを特定するのがはるかに簡単になります;-)

Ted Elliot が述べたように、フィールドは「;」で終了します。"\"" ではありませんFIELDS TERMINATED BY '\"'FIELDS TERMINATED BY ';'

また、mysql の日時フィールドにデータをインポートするための正しい形式は、ISO 形式のようです: YYYY-MM-DD HH:mm:ss (例: 2007-07-31 00:00:00)。

于 2008-11-05T13:38:04.097 に答える
-1

「FIELDS TERMINATED BY」文字列として使用しているものは、実際にはいずれかのフィールド内で発生することがよくあります。これを確認するには、ファイルの各行に .split() の小さなプログラムを書き、フィールドを数えます。うまくいけば、入力ファイルの生成方法を制御し、"~~~~~" のような非常にありそうもないものを使用できるようになります。

また、(直接関係はありませんが、ご存知のとおり)データベースにヌルを入力するには「\ N」を実行する必要があり、入力ファイルの空の文字列が数値フィールドのゼロに変わる可能性があります

http://bugs.mysql.com/bug.php?id=23212

于 2008-11-05T14:49:02.953 に答える