【问题标题】:Load Data Infile OPTIONALLY ENCLOSED BY not working as expectedLoad Data Infile OPTIONALLY ENCLOSED BY not working as expected
【发布时间】:2016-02-18 10:13:03
【问题描述】:

许多相关的票务和 tut 网站,但不幸的是,到目前为止,没有任何解决方案对我有用,在这个问题上停留了几个小时。

我有许多 csv 文件需要插入到 mysql 数据库中,使用“加载文件”可以快速轻松地完成。

但是,它偶然发现了一个部分: 示例 csv 行:

绝对,格伦,阿纳基,“Cool Synd, Super Cool”

我使用的代码是:

$q = "load data infile '$file' into table $table
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '\"'
    LINES TERMINATED BY '\n';";
    mysql_query($q, $db);

我希望有 4 个字段,但我最终得到 5 个,它将引号内的逗号视为分隔符。我认为 OPTIONALLY ENCLOSED BY 的目的是为了抓住这些案例?

我尝试切换字段终止的顺序并选择由命令括起来。试着让它被封闭。尝试不转义“,也 /”/”,尝试使用 2 个单引号而不是双引号;但我仍然无法理解我想要“Cool Synd,Super Cool”作为一个字段。

有人知道我在这里做错了什么吗?

这是我的表结构:

我只需将所有数据都放入此处,然后对其进行处理并将字段移动到相关表格中并转换为正确的格式。有问题的列是“所有者”。 我在这里将其更改为文本类型,因为这是其他人的解决方案,但无论是 text、char、varchar 等,它的工作方式都是相同的。

(在 Ubuntu 服务器 14.4、Apache/2.4.7、PHP 5.5.9 上工作)

【问题讨论】:

  • 您是否删除了 OPTIONALLY ENCLOSED BY '\"' 中的 \,所以它看起来像 OPTIONALLY ENCLOSED BY '"' ? asktom.oracle.com/pls/asktom/…
  • 我做到了,但这会引发 php 语法错误。我需要将双引号转义为特殊字符才能运行。
  • 我认为导致错误的是冒号(;);尝试删除最后一部分的冒号。像这样:“将文件中的数据 '$file' 加载到表 $table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'”
  • 嗯,仍然无法正常工作,但(题外话)令人惊讶的是 mySQL 并没有崩溃。以为我需要一个;在那里结束查询。
  • 您使用的是windows平台吗?另请注意,如果您在 Windows 平台上工作,则可能需要改用 LINES TERMINATED BY '\r\n'。 stackoverflow.com/questions/7019506/…

标签: php mysql csv


【解决方案1】:

我遇到了这个确切的问题并在这里解决了:

https://arstechnica.com/civis/viewtopic.php?t=366658

只需颠倒顺序。

$q = "load data infile '$file' into table $table
    FIELDS OPTIONALLY ENCLOSED BY '"'
    TERMINATED BY ','
    LINES TERMINATED BY '\n';";
    mysql_query($q, $db);

双引号前也不需要反斜杠

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2012-10-05
    • 2010-11-17
    相关资源
    最近更新 更多