将CSV导入mysql表

lcm*_*lcm 94 mysql csv import load-data-infile database-table

将csv文件上传到mysql表的最佳/最快方法是什么?我想将第一行数据用作列名.

发现这个:

如何将CSV文件导入MySQL表

但唯一的答案是使用GUI而不是shell?

hjp*_*r92 146

您可以直接将MYSQL链接到它并使用以下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)
Run Code Online (Sandbox Code Playgroud)

正如读取:将CSV文件直接导入MySQL

编辑

对于您的情况,您需要先编写一个解释器,以查找第一行,并将它们指定为列名.


编辑-2

来自MySQL文档LOAD DATA语法:

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

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

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

LOAD DATA LOCAL INFILE 'uniq.csv'
INTO TABLE tblUniq
FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(uniqName, uniqCity, uniqComments)
Run Code Online (Sandbox Code Playgroud)

  • 您可以在查询中添加"IGNORE 1 LINES",而不是删除第一行 (8认同)

Haw*_*kee 22

这是一个简单的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);

?>
Run Code Online (Sandbox Code Playgroud)

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

php csv_import.php csv_file.csv table_name
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是'包含''''```,如果使用Windows中的CSV,很多人都需要`LINES TERMINATED BY'\ r \n'.最后,用反引号转义字段名称是明智的,如果有空格:`$ columns.="\`$ column \`varchar(250)";` (3认同)
  • **令人敬畏的脚本.**对于那些使用双引号CSV文件(阅读大多数人),将'ENCASED IN'\''`添加到`以''终止的字段,'`它甚至适用于部分双引号的CSV. (2认同)
  • @YumYumYum您能详细说明您遇到的问题吗? (2认同)

Jos*_*tiz 5

如果您有能力安装 phpadmin 有一个导入部分,您可以在其中将 csv 文件导入到您的数据库,甚至还有一个复选框可以将标题设置为包含表列名称的文件的第一行(如果未选中,则第一行将成为数据的一部分