所以我做了一个简单的查询:
connection.query("UPDATE workers SET timestamp='"+thedate+"' WHERE id = " + id,function(err,upres){
connection.release();
if(!err) {
console.log('updated record')
console.log(upres);
}
})
console.log显示数据格式为:2015-04-02 19:29:14
如果我调试SQL语句,结果是:
UPDATE workers SET timestamp='2015-04-02 21:31:16' WHERE id = 3;
但是,当我列出数据时,输出为:
[{"id":3,"worker":"John Doe","timestamp":"2015-04-01T22:00:00.000Z","duration":30}]
与报道的时间相比,这有点远吗?
造成这种情况的原因是什么?
答案 0 :(得分:1)
您不知道MySQL如何将您的VARCHAR变成日期。有很多配置选项。最好使用STR_TO_DATE
函数来规避所有假设。以下是STR_TO_DATE()
文档的链接。
作为旁注,我强烈建议使用预准备语句来保护您的应用程序免受错误和SQL注入。
编辑:
关于您的问题,该列可以是DATETIME
,但您分配的值是VARCHAR
'UPDATE工作人员SET时间戳=? WHERE id =?',['2015年2月2日3:00:00 PM',3'],[callBackFunction]
根据您所说的转换不起作用,我怀疑时间戳列的数据类型。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE NAME = 'workers'
这样的声明应该会提供有关该列的所有信息。如果您有权访问,也可以在GUI中找到它。 MySQL日期,日期时间或时间戳中有三种不同的日期类型。这很可能是DATE列,无法保留时间。