当前位置: 首页 > 知识库问答 >
问题:

如何将CSV文件导入到MySQL表中

邹高懿
2023-03-14

如何将CSV文件导入MySQL表?我想把第一行数据用作列名。

我读到如何将CSV文件导入MySQL表?,但是唯一的答案是使用GUI而不是shell?

共有3个答案

高化
2023-03-14

如果你有能力安装phpadmin,有一个导入部分,你可以导入csv文件到你的数据库,甚至有一个复选框来设置文件的首行包含表列名(如果没有选中,第一个行将成为数据的一部分

陆雨华
2023-03-14

下面是一个简单的PHP命令行脚本,它将执行您需要的操作:

<?php

$host = 'localhost';
$user = 'root';
$pass = '';
$database = 'database';

$db = mysql_connect($host, $user, $pass);
mysql_query("use $database", $db);

/********************************************************************************/
// Parameters: filename.csv table_name

$argv = $_SERVER[argv];

if($argv[1]) { $file = $argv[1]; }
else {
    echo "Please provide a file name\n"; exit; 
}
if($argv[2]) { $table = $argv[2]; }
else {
    $table = pathinfo($file);
    $table = $table['filename'];
}

/********************************************************************************/
// Get the first row to create the column headings

$fp = fopen($file, 'r');
$frow = fgetcsv($fp);

foreach($frow as $column) {
    if($columns) $columns .= ', ';
    $columns .= "`$column` varchar(250)";
}

$create = "create table if not exists $table ($columns);";
mysql_query($create, $db);

/********************************************************************************/
// Import the data into the newly created table.

$file = $_SERVER['PWD'].'/'.$file;
$q = "load data infile '$file' into table $table fields terminated by ',' ignore 1 lines";
mysql_query($q, $db);

?>

它将基于第一行创建一个表,并将剩余的行导入其中。以下是命令行语法:

php csv_import.php csv_file.csv table_name
公西俊能
2023-03-14

您可以直接将MYSQL链接到CSV文件,并使用以下SQL语法上传信息,而不是编写脚本从CSV文件中提取信息。

要将Excel文件导入MySQL,首先将其导出为CSV文件。从生成的CSV文件中删除CSV标头以及Excel可能放在CSV文件末尾的空数据。

然后,您可以通过运行以下操作将其导入到MySQL表中:

load data local infile 'uniq.csv' into table tblUniq fields terminated by ','
  enclosed by '"'
  lines terminated by '\n'
    (uniqName, uniqCity, uniqComments)

如前所述:将CSV文件直接导入MySQL

对于您的情况,您需要首先编写一个解释器,用于查找第一行,并将它们分配为列名。

从MySQL文档的加载数据语法:

忽略数字行选项可用于忽略文件开头的行。例如,您可以使用忽略1行跳过包含列名的初始标题行:

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;

因此,您可以使用以下语句:

LOAD DATA LOCAL INFILE 'uniq.csv'
INTO TABLE tblUniq
FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(uniqName, uniqCity, uniqComments)
 类似资料:
  • 问题内容: 更新 在我发布此问题之后的第二秒,由于对结果查询的语法突出显示,我看到了出了什么问题:该字符串未以闭合斜线开头。现在我将其更改为: 但是,这提出了一个新问题:为什么PDO对象没有为此向我吐出错误?手动执行查询肯定会返回一个错误,指出没有名为的字段,最后是逗号。为什么我没有收到任何错误?有任何想法吗? PS:关于解决我的问题的SO语法突出显示方面有什么想法吗?:-) 我将原始问题留作参考

  • 问题内容: 将csv文件上传到mysql表的最佳/最快方法是什么?我想将第一行数据用作列名。 发现了这一点: 如何将CSV文件导入MySQL表 但是唯一的答案是使用GUI而不是Shell? 问题答案: 您无需编写脚本即可从CSV文件中提取信息,而是可以直接将MYSQL链接到该文件并使用以下SQL语法上传信息。 要将Excel文件导入MySQL,请先将其导出为CSV文件。从生成的CSV文件中删除CS

  • 问题内容: 我有一个CSV文件。它包含140万行数据,因此我无法在Excel中打开该csv文件,因为其限制约为100万行。 因此,我想将此文件导入MySQL工作台中。此csv文件包含以下列 我正在尝试在MySQL工作台中创建一个名为“虚拟”的表,其中包含诸如 CSV文件名为。我在工作台中的代码是这样的: 但我收到类似的错误 问题答案: 我想您缺少ENCLOSED BY子句 并指定csv文件的完整路

  • 问题内容: 我想将csv文件导入到mysql中。 http://www.tech- recipes.com/rx/2345/import_csv_file_direct_into_mysql/ 但是csv中的列名称与数据库表中的列名称不同,我该怎么办?我想以编程方式来做。 问题答案: 您可以创建一个脚本来解析您的csv文件并将数据放入db。 就像是:

  • 问题内容: 我想将csv文件导入到mysql表中。我进行导入的原因是因为我有很多大文件,它们在短时间内发送到我的服务器,尝试用Java逐行添加,但是遇到了很多不同的错误,例如hibernate异常或Java挂起(如果文件是太大。导入非常快,资源很少,效果很好。但是我不知道如何通过hibernate的HQL构建查询来执行此操作,例如: 如果无法做到这一点,那么我该如何从执行此操作的方法中运行shel

  • 问题内容: 我创建了一个数据库和一个表。我还创建了所有需要的字段。我创建了46个字段,其中一个是该行的ID。CSV不包含ID字段,也不包含列的标题。我对所有这些都是陌生的,但一直在努力解决。我不是在这里懒惰地寻求答案,而是在寻找方向。 我试图弄清楚如何导入CSV,但是让它开始从第二个字段开始导入数据,因为我希望auto_increment将填充ID字段,这是我创建的第一个字段。 我没有运气就尝试了