mysql ithalat csv sorunu

3 Cevap php

Tamam, ben sadece okuma ve mysql içine erişim bir csv dosyasını almak için son saat için çalışıyor, ama ne olursa olsun ben ne deneyin, doğru yapmak için alınamıyor edilmiştir.

Benim tablo öylesine gibi:

+-----------------+-------------
| 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)

Ince olmalıdır, ve benim verileri şu anda ayrılmış noktalı virgül olan, benim csv dosyasından bir satır bir örnek şudur:

"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

Ben tablo veri çıkışı için basit bir php sayfasını kullanıyorum, ve bu tamamen yanlıştır. Sorun mükemmel sadece metin görüntüler ile basit bir tablo olarak php sayfası ile değil. Ben yanlış alan türlerini seçmiş veya kolonlarını maç yoksa ben merak ediyorum, ama bu durumda olacağını hiçbir neden göremiyorum. Veri html olarak görüntülenecek çalışıyor çünkü bir şeyler oluyor olabilir?

Ben mümkün olduğunca spesifik bu soruyu tutmaya çalıştık, ve diğerleri ettiler gibi insanlar benim için bunu yapmak için isteyen değilim, ama sorun nerede Ben dürüst göremiyorum.

edit: farklı sınırlayıcılar çalışırken, othertimes değil sayfa bazı Tablee hücrenin sınırlarının ve diğerlerini sahip tamamen siyah anda, php verileri görüntülemek için çalışırken, alanları sütunları eşleşmiyor. Başlar alan doğru görüntülenir olmamıştı.

Bu komut ile bir CSV dosyasından dosyası yüklenirken ediyorum:

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

Bu kadar ben şu anda asıl sorun değil, hangi dışında başlar alanından, anlatmak mümkün olmuştur gibi DB ince görünüyor.

edit2: Ben sonuç tefrika var, ve bu çıkış ekrana ne olduğunu:

i:0;

Bunun ne demek hiçbir fikrim yok.

Edit3: Ben sınırlayıcı tarafından sonlandırıldı, ve \ "değiştirdikten sonra güncelleme denemişti; sorunun hala vb doğru sütunlar konduğunu değil veri kalır, ben cevapsız ne anlamıyorum ...

3 Cevap

Hata DB onu almak, ya da çıktı yolla için sorgu tarafından, DB bozuk veri neden olabilir. O nedenlerinden birine daraltmak gerekir.

  1. Sizden seçerek masada doğrudan göz. I phpMyAdmin Bunun için öneririz.
  2. Doğrudan ekrana sorgu sonucu yazdırmak. , Örneğin: çok kaba bir çalışılabilir ama yol serialise o kadar olabilir echo serialize($result);
  3. Eğer 1 ve hata nedenleri olarak 2 hariç eğer, sorun sorgu işleme yalan gerekir.

Eğer tespit ettikten sonra where neden o what nedenidir çivilemek için çok daha kolay olur, zaten ;-)

As Ted Elliot mentioned: Your fields are terminated by ";" not "\"". Change FIELDS TERMINATED BY '\"' to FIELDS TERMINATED BY ';'

Ayrıca, MySQL datetime alanlara veri aktarmak için doğru biçim ISO formatı gibi görünüyor: YYYY-AA-GG SS: dd: ss (örn. 2007-07-31 00:00:00).

Sizin alanları ile sonlandırılır ";" değil "\" ". Change

 FIELDS TERMINATED BY '\"'

karşı

 FIELDS TERMINATED BY ';'

Siz de bu ekleyebilirsiniz:

 OPTIONALLY ENCLOSED BY '"'

which I think is what you were trying karşı do with the TERMINATED BY clause.

yaygın. ne dize aslında alanlarından biri içinde oluşur "BY DURDURULAN ALANLARDA" olarak kullanarak konum için küçük bir program yazarak bu kontrol olur bölünmüş (dosya) her satırı ve alanları saymak. Umarım, girdi dosyası oluşturulur nasıl denetlemek ve "~ ~ ~ ~ ~" gibi, son derece olası somehting kullanabilirsiniz

Ayrıca, (doğrudan Alakalı, ama bilirsin shd değil) hala db boş değerlere girmek için "\ N" yapmak zorunda ve girdi dosyasındaki boş dizeler sayısal alanlarda sıfırdır dönüşebilir

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