我想将csv文件导入mysql ..类似于:
load data local infile 'uniq.csv' into table tblUniq
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(uniqName, uniqCity, uniqComments)
http://www.tech-recipes.com/rx/2345/import_csv_file_directly_into_mysql/
但csv中的列名和数据库表中的列名不同,我该怎么办? 我想以编程方式进行..
答案 0 :(得分:11)
但csv中的列名和数据库表中的列名不同,我该怎么做?
不是问题。您可以指定将哪个CSV列导入到哪个数据库列中。
默认情况下,如果在LOAD DATA INFILE语句末尾没有提供列列表,则输入行应包含每个表列的字段。如果只想加载某些表的列,请指定列列表:
LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
当我发现INFILE语法过于复杂时,我喜欢使用像HeidiSQL之类的图形客户端一起点击正确的列顺序(它有一个图形预览)并复制+粘贴生成的SQL查询。
答案 1 :(得分:3)
您可以创建一个脚本来解析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);
}
答案 2 :(得分:3)
如果您只想将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)
答案 3 :(得分:0)
试试这个,这对我来说很好。
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
}
答案 4 :(得分:0)
以下语句将csv文件中的数据导入users表。
LOAD DATA INFILE 'c:/xampp/example.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
答案 5 :(得分:0)
我使用以下MySQL查询创建了表,
create table sales(row_id int not null, order_id varchar(20),order_date DATE, ship_mode varchar(30),customer_id varchar(10), customer varchar(15),segment varchar(30),profit double(10,4));
然后我通过以下MySQL查询进行了检查,
mysql> show columns from sales;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| row_id | int | NO | | NULL | |
| order_id | varchar(20) | YES | | NULL | |
| order_date | date | YES | | NULL | |
| ship_mode | varchar(30) | YES | | NULL | |
| customer_id | varchar(10) | YES | | NULL | |
| customer | varchar(15) | YES | | NULL | |
| segment | varchar(30) | YES | | NULL | |
| profit | double(10,4) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
然后我通过以下查询检查了SQL模式,
mysql> SHOW VARIABLES LIKE 'sql_mode';
答案是
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
然后我将其更改如下,
SET SQL_MODE='';
然后最终运行以下SQL查询以将数据从CSV加载到表中,
mysql> load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/sales_data.csv" into table sales fields terminated by ','lines terminated by '\r\n' ignore 1 rows;
它对我有用,但是将CSV文件保存到 C:/ ProgramData / MySQL / MySQL Server 8.0 / Uploads /