2015-04-02 115 views
-1

所以我做了一个简单的查询,像这样:Node.js的更新MySQL的时间戳

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年4月2日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

你不知道MySQL如何将你的VARCHAR变成日期。有很多配置选项。最好使用STR_TO_DATE函数来规避所有的假设。这里是STR_TO_DATE()的文档链接。

作为一个方面说明,我强烈建议使用预准备语句作为一种方法来保护您的应用程序免受错误和sql注入。

EDITS:

在关于您的问题,列可能是DATETIME,但你要指定的值是一个VARCHAR

“UPDATE职工SET时间戳=? WHERE id =?',['4/2/2015 3:00:00 PM',3'],[callBackFunction]

根据你所说的关于转换不起作用,我怀疑数据类型为时间戳列。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE NAME = 'workers' 

像这样的陈述应该会给你关于该列的所有信息。如果你有访问权限,你也可以在GUI中找到它。在MySQL日期,日期时间或时间戳中有三种不同的日期类型。这很可能是DATE列,不能保存时间。

+0

timestamp字段是DATE字段,而不是VARCHAR? – R0b0tn1k 2015-04-02 20:20:22

+0

我如何使用准备好的语句? – R0b0tn1k 2015-04-02 20:20:33

+0

如果我这样做: UPDATE dab_challenge SET timestamp = STR_TO_DATE(''+ mysql +'','%d%b%Y%T:%f')WHERE id =“+ id then time is reset to 00 :00:00 – R0b0tn1k 2015-04-02 20:25:41