所以我做一个简单的查询,像这样:
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}]
与报告的时间相比,这相去甚远?
是什么原因造成的?
您不知道MySQL如何将VARCHAR转换为日期。有很多配置选项。最好使用该STR_TO_DATE
函数来规避所有假设。这是的文档的链接STR_TO_DATE()
。
附带说明一下,我强烈建议您使用准备好的语句,以保护您的应用程序免受错误和sql注入。
编辑:
关于您的问题,该列可能是DATETIME
,但是您要分配的值是VARCHAR
'UPDATE worker SET时间戳=?WHERE id =?',['2015/4/2 3:00:00 PM',3'],[callBackFunction]
根据您所说的关于转换不起作用的说法,我对timestamp列的数据类型感到怀疑。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE NAME = 'workers'
这样的声明应该为您提供有关该列的所有信息。如果您具有访问权限,则也可以在GUI中找到它。MySQL日期,日期时间或时间戳中有三种不同的日期类型。这很可能是DATE列,将无法保留时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句