将CSV文件直接导入到MySQL中

我想将csv文件导入到mysql中。像这样:

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

Import CSV file directly into MySQL

但是csv中的列名和数据库表中的列名是不同的,我应该怎么做? 我想以编程方式做

你可以创build一个脚本来parsing你的csv文件并把数据放到db中。

就像是:

  $path = "yourfile.csv"; $row = 1; if (($handle = fopen($path, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $row++; $data_entries[] = $data ; } fclose($handle); } // this you'll have to expand foreach($data_entries as $line){ $sql = "INSERT INTO ..." $db->execute($line); } 

但是csv中的列名和数据库表中的列名是不同的,我应该怎么做?

不是问题。 您可以指定将哪个CSV列导入到哪个数据库列。

LOAD DATA INFILE语法

默认情况下,当在LOAD DATA INFILE语句末尾没有提供列表时,input行应包含每个表列的字段。 如果只想加载某些表的列,请指定一个列列表:

 LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...); 

当我发现INFILE语法过于复杂时,我喜欢做的事情是使用像HeidiSQL这样的graphics客户端来按正确的列顺序(它具有graphics预览)并复制粘贴生成的SQL查询。

如果您只想将CSV文件中最后一列的前7个字符加载到表格的uniqComments列中,则可以这样做…

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

试试这个,这对我来说工作得很好。

 ini_set('auto_detect_line_endings',TRUE); $csv_data=array(); $file_handle = fopen($_FILES['file_name']['tmp_name'], 'r'); while(($data = fgetcsv($file_handle) ) !== FALSE){ $update_data= array('first'=>$data['0'], 'second'=>$data['1'], 'third'=>$data['2'], 'fourth'=>$data['34']); // save this array in your database } 

以下语句将csv文件中的数据导入到用户表中。

 LOAD DATA INFILE 'c:/xampp/example.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; 

将CSV文件导入到MySQL中