cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengimport fail CSV ke dalam jadual MySQL?

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.

Fail

clientdata.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.

P粉785957729P粉785957729412 hari yang lalu699

membalas semua(2)saya akan balas

  • P粉057869348

    P粉0578693482023-10-10 10:07:31

    Gunakan mysqlimport untuk memuatkan jadual ke dalam pangkalan data:

    mysqlimport --ignore-lines=1 \
                --fields-terminated-by=, \
                --local -u root \
                -p Database \
                 TableName.csv
    

    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'

    balas
    0
  • P粉210405394

    P粉2104053942023-10-10 00:32:34

    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 文件:

    balas
    0
  • Batalbalas