Ben bir aklı başında biçimine refactor böylece MySQL tabloya yüklemeye çalıştığım bir istemciden anormal olaylar günlüğü CSV var. CSV dosyasının her sütunu için bir alanı olan 'CSVImport' adlı bir tablo oluşturdum. CSV 99 sütun içeriyor, bu yüzden bu kendi başına yeterince zor bir işti:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Tabloda herhangi bir kısıtlama yoktur ve sayılar (INT ile temsil edilir), evet / hayır (BIT ile temsil edilir), fiyatlar (DECIMAL ile temsil edilir) ve metin bulanıklıkları ( TEXT tarafından temsil edilir).
Dosyaya veri yüklemeye çalıştım:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
Bütün masa dolu NULL
.
Bence sorun metin bulanıklarının birden fazla satır içermesi ve her yeni satırın bir veri tabanına karşılık gelmesi gibi MySQL'in dosyayı ayrıştırmasıdır. Dosyayı sorunsuz bir şekilde OpenOffice'e yükleyebilirim.
Clientdata.csv dosyası 2593 satır ve 570 kayıt içerir. İlk satır sütun adları içerir. Sanırım virgülle ayrılmış ve metin görünüşte çift tırnakla ayrılmış.
GÜNCELLEME:
Şüphe duyduğunuzda kılavuzu okuyun: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA
OpenOffice'in çıkarım için yeterince akıllı olduğu bilgisine bazı bilgiler ekledim ve şimdi doğru sayıda kayıt yüklüyor:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Ancak yine de çok sayıda tam NULL
kayıt var ve yüklenen verilerin hiçbiri doğru yerde görünmüyor.