从CSV到MySQL的换行问题

Car*_*son 9 php mysql line-breaks

我正在将.csv文件导入MySQL,一切正常,除了文件中的换行符.

我的.csv行之一如下所示:

42,E-A-R™ Classic™ Earplugs,ear,images/ear/classic.jpg,5%,"Proven size, shape, and foam
3M's most popular earplug
Corded and uncorded in a variety of individual packs
NRR 29 dB / CSA Class AL",312-1201,,"E-A-R™ Classic™ Uncorded Earplugs, in Poly Bag",310-1001,,E-A-R™ Classic™ Uncorded Earplugs in Pillow Pack,311-1101,,"E-A-R™ Classic™ Corded Earplugs, in Poly Bag"
Run Code Online (Sandbox Code Playgroud)

第六个字段应该在调用时进入一个新行,但它不会.导入.csv时,我选择\r \n 终止的行.我试过\n和auto但没有运气.

奇怪的是,该字段在数据库中看起来正确,具有所有适当的中断.如果我手动进入PHPmyadmin插入换行符,它会正确打印.每个字段也设置为UTF-8.

有什么想法吗?谢谢.

编辑:这是MySQL语句

LOAD DATA LOCAL INFILE '/tmp/php89FC0F' REPLACE INTO TABLE `ohes_flyer_products`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r'
Run Code Online (Sandbox Code Playgroud)

Kru*_*nal 12

LOAD DATA LOCAL INFILE '/tmp/php89FC0F' REPLACE INTO TABLE `ohes_flyer_products`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
Run Code Online (Sandbox Code Playgroud)


Car*_*rós 3

也许您可以使用fgetcsv将每个 csv 行解析为数组,然后将该数组转储到数据库中?

类似的东西

$fd = fopen($csvfile, "r");
while ($line = fgetcsv($fd))
{
    $sql = sprintf("INSERT INTO tablename (...) VALUES ('%s', ...)", $line[0], ...);
    $res = mysql_query($sql);
}
Run Code Online (Sandbox Code Playgroud)

注意 1:代码尚未准备好用于生产,请检查 SQL 注入!

注意 2:请使用准备好的语句,因为使用它们会大大加快速度(或创建一个多行插入语句)。

注3:将所有内容包装在一个事务中。