Node.js更新MySql时间戳

时间:2015-04-02 19:33:53

标签: mysql node.js

所以我做了一个简单的查询:

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}]

与报道的时间相比,这有点远吗?

造成这种情况的原因是什么?

1 个答案:

答案 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列,无法保留时间。