【问题标题】:MySQL timestamp field return empty object in API responseMySQL 时间戳字段在 API 响应中返回空对象
【发布时间】:2020-07-13 16:25:29
【问题描述】:

我在 MySQL 中有一个带有 2 个时间戳字段的简单表:

*"...

creation timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_edit timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

..."*

当我尝试用一​​个简单的查询来获取时:

SELECT * FROM customers

来自我的 Node.js (mysqljs),json 返回:

creation: {}, // 空对象

last_edit: {} // 空对象

我怎样才能得到日期???

提前致谢! :)

【问题讨论】:

    标签: mysql timestamp mysqljs


    【解决方案1】:

    我猜这是一个 JDBC 问题,因为我看到了类似的行为。

    在我的例子中,该列被定义为

    `last_edit` datetime DEFAULT NULL
    

    JDBC getTimestamp() 方法(建议作为正确的 getter)返回 {}

    我发现使用getObject() 方法以 ISO 字符串格式返回预期的 DATETIME 值(对于我的用例来说已经足够了)。

    刚刚注意到您说您使用的是“mysqljs”,因此不确定此修复是否与您的情况相关,因为 JDBC 部分已被抽象掉...

    更新:由于某种原因,getObject() 返回的时间比数据库中显示的时间 (UTC) 晚了 +7 小时。

    检查getTimestamp() 的输出表明它是一个带有getter 和setter 的对象(在'stringify-cation' 之后不存在)并编写了一个快速转换器。

    function convert_ts_(ts) {
        var date = (ts.getYear() + 1900) + '-' + ((ts.getMonth() + 1) > 9 ? ts.getMonth() + 1 : '0' + (ts.getMonth() + 1)) + '-' + (ts.getDate() > 9 ? ts.getDate() : '0' + ts.getDate());
        var time = (ts.getHours() > 9 ? ts.getHours() : '0' + ts.getHours()) + ':' + (ts.getMinutes() > 9 ? ts.getMinutes() : '0') + ":" + (ts.getSeconds() > 9 ? ts.getSeconds() : '0' + ts.getSeconds());
        return date + 'T' + time;
    }
    

    这将返回“YYYY-MM-DDTHH:MM:SS”格式的日期,并带有零填充

    【讨论】:

      【解决方案2】:

      您需要在表中插入至少一条记录,以便从针对它的查询中返回任何结果。

      如果您出于某种原因只想从数据库中检索当前日期,您可以这样做:

      SELECT CURRENT_TIMESTAMP
      

      SELECT NOW()
      

      【讨论】:

      • 我有一些记录,我在 MySQL Workbench 的表中看到了正确的时间戳。我需要在我的选择查询中使用“*”,因为我有很多字段,我想要全部
      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 2013-02-17
      • 2018-09-09
      • 2019-02-13
      • 2018-09-28
      • 1970-01-01
      • 2017-12-19
      • 2018-11-02
      相关资源
      最近更新 更多