suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie importiere ich eine CSV-Datei in eine MySQL-Tabelle?

Ich habe eine nicht normalisierte Ereignisprotokoll-CSV-Datei von einem Client, die ich in eine MySQL-Tabelle laden möchte, damit sie in ein normales Format rekonstruiert werden kann. Ich habe eine Tabelle namens „CSVImport“ mit einem Feld für jede Spalte der CSV-Datei erstellt. Die CSV-Datei enthält 99 Spalten, daher ist dies an sich schon eine gewaltige Aufgabe:

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

Es gibt keine Einschränkungen für die Tabelle, alle Felder enthalten VARCHAR(256)-Werte außer count (dargestellt durch INT), Ja/Nein (dargestellt durch BIT), Preis (dargestellt durch DECIMAL) und Textbeschreibung (dargestellt durch TEXT) .

Ich habe versucht, die Daten in eine Datei zu laden:

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

Der ganze Tisch ist gefülltNULL.

Ich denke, das Problem besteht darin, dass die Texteinleitung mehr als eine Zeile enthält und MySQL die Datei so analysiert, als ob jede neue Zeile einer Datenbankzeile entspricht. Ich kann die Datei problemlos in Open laden.

Die Datei

clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich denke, es ist durch Kommas getrennt und der Text ist offensichtlich durch doppelte Anführungszeichen getrennt.

Update:

Wenn Sie Fragen haben, lesen Sie bitte das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Ich habe der LOAD DATA-Anweisung einige Informationen hinzugefügt, die intelligent genug sind, um darauf schließen zu können, und jetzt wird die richtige Anzahl an Datensätzen geladen:

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;

Aber es gibt immer noch viele vollständige NULL Datensätze und keine der geladenen Daten scheint am richtigen Ort zu sein.

P粉785957729P粉785957729488 Tage vor799

Antworte allen(2)Ich werde antworten

  • P粉057869348

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

    使用mysqlimport将表加载到数据库中:

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

    我在 http 找到它://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

    要使分隔符成为制表符,请使用 --fields-termerated-by='\t'

    Antwort
    0
  • P粉210405394

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

    问题的核心似乎是将 CSV 文件中的列与表中的列进行匹配。

    许多图形化的 mySQL 客户端对于此类事情都有非常好的导入对话框。

    我最喜欢的工作是基于 Windows 的 HeidiSQL。它为您提供了一个图形界面来构建LOAD DATA命令;您可以稍后以编程方式重复使用它。

    屏幕截图:“导入文本文件”对话框

    要打开“导入文本文件”对话框,请转至工具 > 导入 CSV 文件

    Antwort
    0
  • StornierenAntwort