如何将 CSV 或制表符分隔文件映射到 MySQL 多表数据库

Posted

技术标签:

【中文标题】如何将 CSV 或制表符分隔文件映射到 MySQL 多表数据库【英文标题】:How to Map a CSV or Tab Delimited File to MySQL Multi-Table Database 【发布时间】:2012-04-08 02:28:15 【问题描述】:

我有一个相当大的 XLS 文件,客户提供了总共 830 个标签/表格。

我使用 phpMyAdmin(显然是 mysql)设计了一个多表数据库来存储其中的信息,并手动填充了其中大约 5 张表格以确保数据适合设计的数据库。

是否有软件或某种工具可以帮助我格式化此 XLS 文档并将其映射到数据库中的正确位置?

【问题讨论】:

【参考方案1】:

根据to this thread you can import a csv file exported from excel用php。

引用@noelthefish

您似乎在这里使用 PHP,这是 PHP 中内置的一个函数

array fgetcsv ( resource $handle [, int $length [, string $delimiter [, string $enclosure [, string $escape ]]]] )

<?php
$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    $num = count($data);
    echo "<p> $num fields in line $row: </p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) 
        echo $data[$c] . "\n";
    

fclose($handle);
?>

这是你需要的最基本的东西。你当然会投入 while 循环中的数据库更新部分。取出 ECHO 语句也是如此,除非您正在调试但基本上使用 稍加改动,这小段代码就可以满足您的需要。如果 您需要更多信息,请查看 uk.php.net

【讨论】:

【参考方案2】:

可以将电子表格中的数据导入 Access 并将字段映射到您想要的任何表/列。也可以使用 ODBC 连接器将 Access 连接到 MySQL DB,本质上是using Access as a front-end to MySQL。

或者,您可以按照 toomanyairmiles 的建议进行操作,只需编写 PHP 代码即可将 CSV 数据转换为 MySQL DB 所需的格式。当我们需要将来自不同来源的销售数据导入内部销售/版税跟踪系统时,这就是我过去所做的。如果您需要频繁导入,我建议自动化系统(例如通过 Excel 宏)将单个工作表导出到单个目录中的 CSV,或者,如果更方便,您可以将它们压缩在一起并将 zip 文件上传到PHP 应用程序。

如果您要对 MySQL 进行批量导入,您可能需要考虑使用 LOAD DATA INFILE,通常是 the fastest way to import data into MySQL,这样在您按摩后将新的 CSV 文件写入磁盘实际上会更快数据,然后使用 LOAD DATA INFILE 而不是直接批量处理 INSERT。在我的 Intranet 上执行此操作实际上将插入时间从超过 3 秒(已经比大约 3 分钟有所改进。它需要做数千个 INSERTs)减少到 240 毫秒。

【讨论】:

以上是关于如何将 CSV 或制表符分隔文件映射到 MySQL 多表数据库的主要内容,如果未能解决你的问题,请参考以下文章

将MySQL查询另存为制表符或逗号分隔的文件

Spark-SQL:如何将 TSV 或 CSV 文件读入数据框并应用自定义模式?

使用 OpenOffice Calc 打开 Excel 文件并转换为 CSV 或制表符分隔

CSV文件转换帮助类

如何在 BASH 中将制表符分隔值 (TSV) 文件转换为逗号分隔值 (CSV) 文件?

使用 python 和 pandas 将错误创建的大型 csv 文件转换为制表符分隔文件