0

我正在使用 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 中创建的。

我哪里错了?

4

1 回答 1

1

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

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

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

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

这非常有效。

于 2013-04-10T23:38:26.027 回答