将 CSV 文件导入 mysql。 (特别是关于创建表命令)

Posted

技术标签:

【中文标题】将 CSV 文件导入 mysql。 (特别是关于创建表命令)【英文标题】:Importing a CSV file into mysql. (Specifically about create table command) 【发布时间】:2012-05-21 14:02:14 【问题描述】:

我有一个包含如下值的文本文件:

第一行是这样的列名列表:

col_name_1, col_name_2, col_name_3 ......(600 columns)

并且所有以下列都有这样的值:

1101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1101,1,3.86,65,0.46418,65,0.57151...

将其导入 mysql 的最佳方法是什么?

具体如何提出正确的 CREATE TABLE 命令以便数据能够正确加载自身?什么是最好的通用数据类型,它可以接受所有上述值,如 1101 或 3.86 或 0.57151。我不担心该表在存储方面效率低下,因为我需要一次性使用它。

我已经尝试了其他相关问题中的一些建议,例如使用 phpmyadmin(由于大量数据,我猜它会崩溃)

请帮忙!

【问题讨论】:

你可以从 php.ini 增加 max_execution, max_input 时间。取消选中“在脚本检测到接近 PHP 超时限制时允许中断导入”。在导入选项卡下的 phpmyadmin 中。我希望这会让你通过 phpmyadmin 将你的 csv 文件上传到 db 中。 【参考方案1】:

CSV 文件中的数据未标准化;这 600 列可能分布在几个相关的表中。这是处理这些数据的推荐方法。然后,您可以使用fgetcsv() 在 PHP 中逐行读取 CSV 文件。

要让 MySQL 处理 CSV,您可以创建一个 600 列的表(我认为)并发出 LOAD DATA LOCAL INFILE 语句(或者可能使用 mysqlimport,对此不确定)。

对于更大的值,最通用的数据类型必须是 VARCHARTEXT,但是当用于数字、日期等时,你当然会失去语义。

【讨论】:

什么是最通用的数值数据类型,我们有这样的吗?例如。在 C 中,double 可以容纳任何东西(int 或 float 或 double)。我们有没有类似 mysql 的东西。 可能是FLOATDOUBLE。见这里:dev.mysql.com/doc/refman/5.5/en/numeric-types.html【参考方案2】:

我注意到您包含了 phpmyadmin 标记。

PHPMyAdmin 可以开箱即用地处理这个问题。它将“神奇地”决定制作每一列的类型,并为您提供CREATE 表格以及INSERT 所有数据。无需担心LOAD DATA FROM INFILE,尽管如果您想在不依赖 PHPMyAdmin 的神奇工具的情况下确切知道发生了什么,这种方法会更安全。

【讨论】:

phpmyadmin 崩溃了,甚至没有错误消息。所以我想自己做。【参考方案3】:

试试convertcsvtomysql,只需上传你的csv文件,然后你就可以下载和/或复制mysql语句来创建表和插入行。

【讨论】:

以上是关于将 CSV 文件导入 mysql。 (特别是关于创建表命令)的主要内容,如果未能解决你的问题,请参考以下文章

百万行超大csv如何快速导入mysql

如何使用 PHP CodeIgniter 将 CSV 数据导入 MYSQL 数据库?

如何将csv导入mysql和mysql导出csv

怎么把csv文件导入mysql

如何把csv文件批量导入到mysql数据库

如何将 CSV 文件导入 MySQL 表