将 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
,对此不确定)。
对于更大的值,最通用的数据类型必须是 VARCHAR
或 TEXT
,但是当用于数字、日期等时,你当然会失去语义。
【讨论】:
什么是最通用的数值数据类型,我们有这样的吗?例如。在 C 中,double 可以容纳任何东西(int 或 float 或 double)。我们有没有类似 mysql 的东西。 可能是FLOAT
或DOUBLE
。见这里: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。 (特别是关于创建表命令)的主要内容,如果未能解决你的问题,请参考以下文章