Heim > Fragen und Antworten > Hauptteil
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粉1655228862023-09-17 00:57:56
必须导入的源 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,其中包含逗号、“引号”字符和“双引号”字符。 |