Schreiben Sie den Titel um: Hochladen auf MySQL mithilfe einer CSV-Datei mit einer einzelnen Spalte, die mehrere Textzeilen, doppelte Anführungszeichen und Kommas enthält
P粉469090753
P粉469090753 2023-09-16 10:05:22
0
1
382

Ich habe ein Problem beim Hochladen von Daten in die MySQL-Datenbank.

Die Daten sehen so aus:

Bewertungs-ID, Benutzer, Text

Eine typische Zeile sieht so aus:

12345,SomeCoolName,"this is my "awsome" comment. some more text, and dome more. and some "more""

Das sollte eine Zeile in meiner Tabelle sein.

Ich habe Probleme beim Hochladen dieses Inhalts, da das Textfeld mehrere Zeilen enthält und Kommas und Klammern verwendet werden. Irgendwelche Vorschläge, wie mit diesem Problem umgegangen werden kann?

Danke!

Ich habe versucht, einige Handbücher zum Hochladen von CSV-Dateien in eine Datenbank zu verwenden, aber ohne Erfolg.

P粉469090753
P粉469090753

Antworte allen (1)
P粉165522886

演示示例。

必须导入的源 CSV 内容:

review_id,user,text 123,John,This is multiline 1, which contains a comma. 456,Jim,This is miltiline 2, which contains commas, 'quote' chars and "double quote" chars.

此数据必须导入到的表:

CREATE TABLE test (review_id INT, user VARCHAR(255), review_text TEXT);

将数据加载到表中的查询:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/test.csv' INTO TABLE test FIELDS TERMINATED BY '\0' ENCLOSED BY '' ESCAPED BY '' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (@line) SET review_id = (@review_id := CASE WHEN @line REGEXP '^\\d' THEN SUBSTRING_INDEX(@line, ',', 1) ELSE @review_id END ), user = (@user := CASE WHEN @line REGEXP '^\\d' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@line, ',', 2), ',', -1) ELSE @user END ), review_text = (@review_text := CASE WHEN @line REGEXP '^\\d' THEN SUBSTRING(@line FROM 2 + LENGTH(SUBSTRING_INDEX(@line, ',', 2))) ELSE CONCAT_WS(' ', @review_text, @line) END );

加载后表格数据状态:

review_id 用户 review_text
123 约翰 这是
123 约翰 这是多行 1,
123 约翰 这是多行 1,其中包含逗号。
456 吉姆 这是
456 吉姆 这是 miltiline 2,其中包含
456 吉姆 这是 miltiline 2,其中包含逗号、“引号”字符和“双引号”字符。

清算:

DELETE t1 FROM test t1 JOIN test t2 USING (user) WHERE t1.review_text < t2.review_text;

最终表数据状态:

review_id 用户 review_text
123 约翰 这是多行 1,其中包含逗号。
456 吉姆 这是 miltiline 2,其中包含逗号、“引号”字符和“双引号”字符。
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!