在LOAD DATA INFILE期间,时间戳字段未正确更新

时间:2013-04-10 19:14:24

标签: php mysql

我正在使用LOAD DATA INFILE填充带有测试数据的MySQL表,并看到我不理解的行为。 timestamp列(默认= CURRENT_TIMESTAMP)正在正确更新一些记录,其他似乎是随机的,发布时间为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字段除外,它有时会得到正确的结果,有时会得到00:00:00。

CSV文件在所有记录中都有一个前导逗号,表示缺少Q_ID数据。 Q_ID字段(自动增量)正常工作。 CSV行末尾没有时间戳数据,我希望MySQL输入默认值。我试图在CSV中列出的最后一个字段之后放置尾随coma,认为这可能会使得更清楚的是有数据要添加到Submit_Timestamp字段中,但它使事情变得更糟,给我发电子邮件00:00:00对于每一条记录。

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

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

我哪里错了?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

这很有效。