【问题标题】:mysql timestamp now() is not working with nodejsmysql 时间戳 now() 不适用于 nodejs
【发布时间】:2017-12-20 09:50:56
【问题描述】:

我正在尝试使用 nodejs 在 mysql 表中插入一行。我正在尝试通过在 nodejs 中将其值作为 now() 发送来更新列 creation_date(timestamp),但它给出了一个错误,指出“现在”未定义。当我直接在 mysql 中执行相同的 sql 查询时,它正在工作。我不知道问题出在哪里。有人可以在这里帮助我吗... 这是我在 mysql 的表中插入值的 nodejs 代码..

var sql = `INSERT INTO sales
    (
        user_id, name, tagline, start_date, 
        start_time, end_date, reg_start, 
        reg_end, descr, creation_date
    ) VALUES (
        ?, ?, ?, ?,
        ?, ?, ?,
        ?, ?, ?
    )`

pool.query(sql, [
    id, req.body.sale_name, req.body.tag, req.body.start,
    req.body.stime, req.body.end, req.body.reg_start,
    req.body.start, req.body.descr, now()
], function (err, result) { //further code})

我得到的错误是:ReferenceError: now is not defined

【问题讨论】:

  • 几个问题 :: 您的客户端和数据库服务器是否在同一时区运行?如果不是你想在数据库中存储哪个日期时间?如果要存储数据库时间,可以在查询中忽略此字段,使用 NOW() 作为 sql 中的默认值。
  • 你必须使用 'NOW()' 。我猜这是一个愚蠢的错误。
  • 是的,它在同一时区工作
  • 您使用的是节点 js,因此使用 new Date() 代替 now().now() 在您使用 mysql 插入数据时有效
  • 以上你试过了吗?

标签: javascript mysql node.js


【解决方案1】:

您可以使用通用 JavaScript 对象获取今天的日期。

var datetime = new Date();

所以,我猜你应该这样写:

pool.query(sql, [
    id, req.body.sale_name, req.body.tag, req.body.start,
    req.body.stime, req.body.end, req.body.reg_start,
    req.body.start, req.body.descr, new Date()
], function (err, result) { //further code})

【讨论】:

【解决方案2】:

您收到此错误的原因是 now() 在 MYSQL 上运行,在 javascript 中运行 now() 以查找脚本中不存在的函数。

在 Javascript 中加载日期的正确方法是“Date.now();”

参考:JavaScript now() Method

【讨论】:

    【解决方案3】:

    TIMESTAMPDATETIME列可以在MySQL中自动初始化并更新为当前日期和时间(即当前时间戳) .

    因此,您可以在此处设置当前时间戳,而无需从客户端传递它。每当在 MySQL 数据库中插入一行时,当前时间戳将自动设置为 TIMESTAMP/DATETIME 列。

    CREATE TABLE 语句:

    CREATE TABLE t1 (
      // rest of the statements
      'creation_timestamp' TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      'creation_datetime' DATETIME DEFAULT CURRENT_TIMESTAMP,
    );
    

    现在,每当将一行插入数据库时​​,creation_timestamp/creation_datetime 列将自动设置为当前时间戳。

    注意:

    1. 在这里,您无需在客户端的插入语句中传递任何日期或时间戳。
    2. 您可以通过here了解更多信息。

    【讨论】:

      【解决方案4】:

      我认为,您必须像这样将 now() 作为字符串提供:

        pool.query(sql, [
          id, req.body.sale_name, req.body.tag, req.body.start,
          req.body.stime, req.body.end, req.body.reg_start,
          req.body.start, req.body.descr, 'now()'
        ], function (err, result) { //further code})
      

      【讨论】:

      • 该行被插入到表中,但值是 00-00-0000 00:00:00 被保存在表中。
      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 2017-06-19
      • 1970-01-01
      • 2023-03-27
      • 2021-06-05
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多