将标题重写为:使用含有多行文本、双引号和逗号的单列的CSV文件上传至MySQL
P粉469090753
P粉469090753 2023-09-16 10:05:22
0
1
298

我在将数据上传到 mysql 数据库时遇到问题。

数据看起来像这样:

review_id、用户、文本

典型的行如下所示:

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

这应该是我表格中的一行。

由于文本字段中有多行以及使用逗号和括号,我在上传此内容时遇到问题。 关于如何处理这个问题有什么建议吗?

谢谢!

我尝试使用一些我找到的有关将 csv 文件上传到数据库的手册,但没有成功。

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,其中包含逗号、“引号”字符和“双引号”字符。
Beliebte Tutorials
Mehr>
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!