Import CSV file directly into MySQL

2019-01-02 23:51发布

i want to import csv file into mysql.. something like:

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/

but column names in csv and that in database table are different what should i do? i want to do it programmatically..

5条回答
唯我独甜
2楼-- · 2019-01-03 00:32

If you want to load only the first 7 characters of the last column from the CSV file into the uniqComments column of the table, then you can do something like this...

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)
查看更多
Lonely孤独者°
3楼-- · 2019-01-03 00:36

but column names in csv and that in database table are different what should i do?

Not a problem. You can specify which CSV column gets imported into which database column.

LOAD DATA INFILE syntax

By default, when no column list is provided at the end of the LOAD DATA INFILE statement, input lines are expected to contain a field for each table column. If you want to load only some of a table's columns, specify a column list:

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

What I like to do when I find the INFILE syntax too complicated is use a graphical client like HeidiSQL to click together the proper column order (it has a graphical preview) and copy+paste the generated SQL query.

查看更多
冷血范
4楼-- · 2019-01-03 00:36

Try this, this is working fine for me.

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
}
查看更多
等我变得足够好
5楼-- · 2019-01-03 00:37

The below statements import the data from csv file into users table.

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

Import CSV file into MySQL

查看更多
女痞
6楼-- · 2019-01-03 00:55

You can create a script to parse your csv file and to put the data into db.

Something like:

    $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);
    }
查看更多
登录 后发表回答