我正在使用 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 中创建的。
我哪里错了?