我正在使用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中创建的。
我哪里错了?
答案 0 :(得分:1)
对于包含逗号的字符串数据,Excel保存为CSV存在问题。
您可以通过将分隔符更改为不在数据中的内容来轻松解决此问题。我用了'|' (高于键盘上的反斜杠)。
您还需要更改SQL命令以将此更改合并到分隔符中。
$sql = "LOAD DATA INFILE 'c:/wamp/www/Q_Sample_01.CSV' INTO TABLE Questions FIELDS TERMINATED BY '|'";
这很有效。