将 csv 文件导入数据库 - 带逗号的值

Posted

技术标签:

【中文标题】将 csv 文件导入数据库 - 带逗号的值【英文标题】:Import csv file to database - values with comma 【发布时间】:2014-01-02 08:59:07 【问题描述】:

我正在尝试将 csv 文件导入我的数据库。它正在工作,但问题是我有一个列,即“address1”和“address2”可能有逗号。例子是:

194 Chavez compound, Something City

发生的情况是 194 Chavez 大院位于“address1”中,Something City 位于“address2”中。整个地址只能在“address1”中。

这是我在我的数据库中导入的代码:

    do  
        if ($data[0])  
            mysql_query("INSERT INTO awb (recNAME, company, address1, address2, city, province, postalCODE, contactNO, email, commodity, type, weight, length, width, height, decVAL, specINSTRUC, shipREF, payMETHOD, packNO, trackNO) VALUES 
                ( 
                    '".addslashes($data[0])."', 
                    '".addslashes($data[1])."',
                    '".addslashes($data[2])."', 
                    '".addslashes($data[3])."',
                    '".addslashes($data[4])."', 
                    '".addslashes($data[5])."',
                    '".addslashes($data[6])."', 
                    '".addslashes($data[7])."',
                    '".addslashes($data[8])."', 
                    '".addslashes($data[9])."',
                    '".addslashes($data[10])."', 
                    '".addslashes($data[11])."',
                    '".addslashes($data[12])."', 
                    '".addslashes($data[13])."',
                    '".addslashes($data[14])."', 
                    '".addslashes($data[15])."',
                    '".addslashes($data[16])."', 
                    '".addslashes($data[17])."',
                    '".addslashes($data[18])."',    
                    '".addslashes($data[19])."',                    
                    '".addslashes($data[20])."' 
                ) 
            "); 
         
     while ($data = fgetcsv($handle,1000,",","'")); 

【问题讨论】:

为什么不使用LOAD DATA INFILEmysqlimport 无论如何,如果包含字段分隔符的字段未括起来(例如,在引号 " 字符内)或字段内的此类分隔符未以某种方式转义(例如,使用反斜杠 \ 字符) ,任何解析器如何可能知道给定的分隔符是否是字段的一部分? 如果它是一个正确的 csv 文件,那么任何包含逗号的值都应该用引号括起来......你说的是 fgetcsv() 调用中的单引号;确保它是单引号而不是双引号 “字段分隔符”是分隔文件中“字段”(或“列”或“值”)的一个或多个字符:在您的情况下,“字段分隔符”是逗号 @ 987654328@。解析器是一个读取文件并了解其中的数据应该如何划分的程序。 @nicole101:在这种情况下,您应该使用mysql_real_escape_string() 而不是addslashes()。但是,我建议您转而专注于让 LOAD DATAmysqlimport 为您工作。 【参考方案1】:

正如其中一位评论者所建议的,请尝试使用 LOAD DATA INFILE:

LOAD DATA INFILE '[file name]' INTO TABLE '[table name]'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

如果您的 CSV 文件有标题行,您还需要添加以下子句:IGNORE 1 LINES。

【讨论】:

以上是关于将 csv 文件导入数据库 - 带逗号的值的主要内容,如果未能解决你的问题,请参考以下文章

导入带有“当其中一些包含”以及逗号的值的 CSV 文件

C#导入csv文件,数据中有逗号怎么处理

hive导入csv文件,字段中双引号内有逗号

将 CSV 文件导入 SQL Server

BULK INSERT将CSV或TXT文件导入到SQL Server

从 CSV 文件导入包含逗号的变量