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