【问题标题】:Node.js Updating MySql timestampNode.js 更新 MySql 时间戳
【发布时间】:2015-04-02 19:33:53
【问题描述】:

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

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 node.js


    【解决方案1】:

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

    作为旁注,我强烈建议使用准备好的语句来保护您的应用程序免受错误和 sql 注入的影响。

    编辑:

    关于您的问题,该列可能是DATETIME,但您分配的值是VARCHAR

    '更新工人 SET 时间戳 = ? WHERE id = ?', ['4/2/2015 3:00:00 PM', 3'], [callBackFunction]

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

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

    这样的声明应该为您提供有关该列的所有信息。如果您有权访问,您也可以在 GUI 中找到它。 MySQL date、datetime 或 timestamp 中有三种不同的日期类型。这很可能是一个 DATE 列,无法保持时间。

    【讨论】:

    • 时间戳字段是 DATE 字段,而不是 VARCHAR?
    • 我如何使用准备好的语句?
    • 如果我这样做: UPDATE dab_challenge SET timestamp=STR_TO_DATE('"+mysql+"','%d %b %Y %T:%f') WHERE id = " + id then time is重置为 00:00:00
    • 也不这样做: UPDATE dab_challenge SET timestamp=DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') WHERE id = " + id 输出仍然是 00: 00:00
    • 它是两者的结合:1. 这是一个日期字段 2. 我按照您建议的方式添加了参数。谢谢!
    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多