将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)
但是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中