【问题标题】:Timestamp field not updating properly during LOAD DATA INFILE在 LOAD DATA INFILE 期间时间戳字段未正确更新
【发布时间】:2013-04-10 19:14:24
【问题描述】:

我正在使用 LOAD DATA INFILE 使用测试数据填充 MySQL 表,并看到我不理解的行为。时间戳列(默认值=CURRENT_TIMESTAMP)正在正确更新一些记录,而另一些似乎随机地更新为 0000-00-00 00:00:00。

Questions Table Structure:
Column             Type     Null    Default             Comments
Q_ID               int(10)  No           
Clients_ID         int(10)  No           
Question           varchar(255) No  

。 .其他字段遗漏 .

Submit_Timestamp   timestamp    No      CURRENT_TIMESTAMP 

连接db后,相关代码如下:

// prepare the SQL query for the Questions table

$sql = "LOAD DATA INFILE 'c:/wamp/www/Q_Sample_01.CSV' INTO TABLE Questions FIELDS TERMINATED BY ','";

// submit the query and capture the result

$result = mysqli_query($conn, $sql) or die (mysqli_error($conn));

程序执行并将数据正确地插入到所有字段中,但 Submit_Timestamp 字段除外,该字段有时会得到正确的结果,有时会得到 0000-00-00 00:00:00。

CSV 文件在所有记录中都有一个前导逗号,表示缺少 Q_ID 数据。 Q_ID 字段,即 Autoincrement,工作正常。 CSV 行末尾没有时间戳数据,我希望 MySQL 输入默认值。我试图在 CSV 中列出的最后一个字段之后放置尾随逗号,认为这可能更清楚地表明有数据要添加到 Submit_Timestamp 字段中,但它让事情变得更糟,给了我 0000-00-00 00:00:00每条记录。

我还尝试了一个建议来更改制作 Submit_Timestamp ON UPDATE CURRENT_TIMESTAMP 的表,但它没有帮助,也不是我想要的这个字段的行为,所以我删除了它。

我刚刚注意到一个模式,虽然它还不能解释我。时间戳全为 0 的记录中至少有一个字段用双引号括起来,以防止包含的逗号不恰当地指示新字段。这并不总是在最后一个字段中(与 Submit_Timestamp 字段相邻)。 CSV 是在 Microsoft Excel 中创建的。

我哪里错了?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    Excel 保存到 CSV 对包含逗号的字符串数据有问题。

    您可以通过将分隔符更改为不在数据中的字符来轻松解决此问题。我用了'|' (在我键盘上的反斜杠上方)。

    您还需要更改 SQL 命令以将此更改合并到分隔符中。

    $sql = "LOAD DATA INFILE 'c:/wamp/www/Q_Sample_01.CSV' INTO TABLE Questions FIELDS TERMINATED BY '|'";

    效果很好。

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2019-01-11
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      相关资源
      最近更新 更多