我们希望用户能够将 CSV 文件上传到我们的软件中,并将这些文件放入临时表中,以便对其进行分析并填充其他数据(上传进程 ID、用户名等)。
目前,我们的应用程序允许用户将文件上传到系统中,但文件最终以 MySQL 表中的 TEXT 值形式存在(技术上是 BLOB,但出于我们的目的,我将其称为 TEXT,作为我唯一的文件类型)涉及的是 CSV)。
用户上传 CSV 并且它变成 TEXT 值后,我想获取 TEXT 值并将其解释为具有多个列的 CSV 导入,以填充 MySQL 中的另一个表而不使用文件输出.
简单的插入选择将不起作用,因为文本被解析为一大块(应该如此)而不是多列。
insert into db2.my_table (select VALUE from db1.FILE_ATTACHMENT where id = 123456)
我发现的大多数示例都是将数据从数据库导出为文件,然后将其导入回,即类似于:
SELECT VALUE INTO OUTFILE '/tmp/test.csv'
后跟类似的内容:
LOAD DATA INFILE '/tmp/test.csv' INTO TABLE db2.my_table;
但如果可能的话,我想在 MySQL 中完成整个过程,而不使用上面的“SELECT INTO OUTFILE/LOAD DATA INFILE”方法。
有没有一种方法可以让 MySQL 将 TEXT 值视为多列而不是一个大块?或者我是否一直在导出到文件然后重新导入?
谢谢!
最佳答案
您的数据加载方法存在缺陷。 不要将每一行保留在单个列中,而是将每个值保留在相应的列中。
例如,假设 csv 文件包含 n
列。创建一个包含 n
列的表。
LOAD DATA INFILE '/tmp/test.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS; // for ignoring header if present in csv file.
关于mysql - 如何让 MySQL 从包含 CSV 数据作为多列的 TEXT 列加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464762/