Saya mempunyai CSV log peristiwa yang tidak dinormalkan daripada pelanggan yang saya cuba muatkan ke dalam jadual MySQL supaya ia boleh dibina semula ke dalam format biasa. Saya mencipta jadual yang dipanggil "CSVImport" dengan medan untuk setiap lajur fail CSV. CSV mengandungi 99 lajur, jadi ini adalah tugas yang sukar dengan sendirinya:
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);
Tiada kekangan pada jadual, semua medan mengandungi nilai VARCHAR(256) kecuali kiraan (diwakili oleh INT), ya/tidak (diwakili oleh BIT), harga (diwakili oleh DECIMAL) dan keterangan teks (diwakili oleh TEKS) .
Saya cuba memuatkan data ke dalam fail:
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 | ...
Seluruh meja penuhNULL
.
Saya rasa masalahnya ialah pengenalan teks mengandungi lebih daripada satu baris, dan MySQL sedang menghuraikan fail seolah-olah setiap baris baharu sepadan dengan baris pangkalan data. Saya boleh memuatkan fail ke dalam Open tanpa sebarang masalah.
Failclientdata.csv mengandungi 2593 baris dan 570 rekod. Baris pertama mengandungi nama lajur. Saya rasa ia dibatasi koma dan teksnya jelas dibatasi oleh petikan berganda.
Kemas kini:
Jika anda mempunyai sebarang soalan, sila baca manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Saya menambahkan beberapa maklumat pada LOAD DATA
pernyataan, cukup bijak untuk membuat kesimpulan, dan kini ia memuatkan bilangan rekod yang betul:
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;
Tetapi masih terdapat banyak NULL
rekod sepenuhnya, dan tiada data yang dimuatkan nampaknya berada di tempat yang betul.
Gunakan mysqlimport untuk memuatkan jadual ke dalam pangkalan data: p>
Saya menemuinya di http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Untuk menjadikan pemisah sebagai tab, gunakan
--fields-termerated-by='t'
Inti masalah nampaknya memadankan lajur dalam fail CSV dengan lajur dalam jadual.
Ramai pelanggan mySQL grafik mempunyai dialog import yang sangat bagus untuk perkara seperti ini.
Pekerjaan kegemaran saya ialah berasaskan Windows HeidiSQL. Ia memberikan anda antara muka grafik untuk membina
LOAD DATA
perintah; anda boleh menggunakannya semula secara pemprograman kemudian.Tangkapan skrin: Dialog "Import fail teks"
Untuk membuka kotak dialog Import Fail Teks, pergi ke
工具 > 导入 CSV 文件
: