mysql - 如何让 MySQL 从包含 CSV 数据作为多列的 TEXT 列加载数据?

标签 mysql csv

我们希望用户能够将 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/

相关文章:

mysql - 如何在事务回滚中恢复自动ID

java - 解析大型数据文件的最快文件/方式是什么?

python - 在 python 中使用 argparse 将 csv 转换为 xml

sql - 本地 TSV 文件写入 SQL 表

python - 从 Python 中的 CSV 文件中获取随机行并找到相应的单词,如测验

python - 解析以引号开头的 tsv 文件

php - 删除行时如何始终序列化mysql中的id行

mysql - 插入到另一个表中某些内容为 true 的表中

mysql - JPA 或 Hibernate 如何生成 UUID 作为 key ?

mysql - PDO插入最大id+1而不是auto_increment