代码之家  ›  专栏  ›  技术社区  ›  ehmad

将CSV文件直接导入MySQL

  •  8
  • ehmad  · 技术社区  · 14 年前

    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中的列名和数据库表中的列名不同,我应该怎么做? 我想用编程的方式。。

    5 回复  |  直到 12 年前
        1
  •  3
  •   Elzo Valugi    14 年前

    您可以创建一个脚本来解析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
  •  11
  •   Pekka    14 年前

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

    LOAD DATA INFILE syntax

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

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

    当我发现INFILE语法太复杂时,我喜欢做的是使用类似于 HeidiSQL

        3
  •  3
  •   shantanuo    14 年前

    如果只想将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)
    
        4
  •  0
  •   Shiva Saurabh Praveen Rao K    11 年前

    试试这个,这个对我很有用。

    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
  •  0
  •   Sourav Basak    9 年前

    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