【问题标题】:MySQL load data infile function and format of the csv fileMySQL load data infile函数及csv文件格式
【发布时间】:2013-05-26 13:15:32
【问题描述】:

所以我需要一些帮助,我被困了好几个小时。所以我在 PHP 中有这个数据数组,我使用 fputcsv 函数将其写入 CSV 文件。现在数据被保存到 CSV 文件中,格式如下:

Becoming Human, "becoming_human_uk", "2011", 
Bed of Roses, "bed_of_roses", "2008", 
Bed of Roses, "Bed_of_Roses_2008", "2008", 
Bedlam, "bedlam", "2011", 

这将持续约 10k 行。现在到目前为止,这一切都是笨拙的多莉。但是现在我想将所有这些数据从 CSV 导入到我的数据库表中。为此,我使用以下格式的 LOAD DATA INFILE mysql 函数:

$sql="LOAD DATA INFILE 'path/series.csv' INTO TABLE series FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' (title, link, year)";

现在问题就在这里。只有一行被插入到数据库和它的第一行。我怀疑问题在于这些可选参数,例如 TERMINATED BY 或 ENCLOSED BY。我将字段放入可选地由括起来,因为第一个字段没有包含在“”中,而其他两个是。字段也以 (,) 结尾,所以我想没关系。这只会留下行终止,我不知道这是否正确。这可能还有其他问题。或者我能否以某种方式更好地将数据输入格式化为 CSV,以便所有字段都以相同的方式包含在内。因此,如果有人可以帮助我在这里发现问题,我将不胜感激。谢谢。

【问题讨论】:

  • 为什么不直接从数组到数据库。
  • 我发现只插入一行的最常见原因是行终止符定义与实际行终止符不匹配
  • 我无法从数组转到数据库,因为我有大约一百万行,并且将数据从 csv 加载到数据库更快。至少这就是我现在想要找出的。
  • 我也认为它是行终止符,但我几乎尝试了所有方法,它仍然不起作用。
  • 我看不到创建文件然后导入数据库比直接进入数据库更快。

标签: php mysql csv


【解决方案1】:

我在 MySQL 5.5.31 中进行了测试,这很有效:

mysql> LOAD DATA LOCAL INFILE 'series.csv' INTO TABLE series 
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '\"' 
  LINES TERMINATED BY '\n' 
  (title, link, year);
Query OK, 4 rows affected (0.00 sec)

我必须编辑 csv 文件:

  • 不要在逗号后加空格。

  • 不要在行尾加逗号。

  • 如果您的文件仅包含 \n 换行符,请不要使用 \r\n

  • 不要在行尾放置空格。

  • 我在 MySQL 客户端中进行测试,而不是在 PHP 中,因此我删除了双反斜杠。

【讨论】:

  • 我只是在做你所做的修改。我会发回结果。
  • 好的,我更改了 CSV 文件的格式,现在是这样的:data1,data2,data3 - 我删除了 " 和空格。我还删除了可选的由 '\"' 关闭的参数现在。因此,字段由 (,) 终止,行由 (\n) 终止。但现在我没有得到任何输入到数据库中。
  • 不用等待,只需删除标题中的一些逗号即可。现在工作。非常感谢比尔的帮助。
  • 只是在标题中保留逗号等的想法使用不太可能的分隔符作为分隔符,例如 §§§, fputcsv($fp, $fields, "§§§"); (我想还有更好的方法)
猜你喜欢
  • 2015-11-22
  • 2013-01-24
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多