【发布时间】:2018-10-19 09:15:40
【问题描述】:
在我们构建 MySQL 数据库很久之后,我就开始使用 Sequelize。我们有两列,“created”和“modified”,分别存储创建记录的日期和修改记录的时间。
“created”列的类型为“DATETIME”,默认值为“CURRENT_TIMESTAMP”。 “修改”列的类型为“TIMESTAMP”,默认值为“ON UPDATE CURRENT_TIMESTAMP”。 MySQL 使用 UTC 存储日期和时间。
在 Sequelize 中的模型中,我们设置了“timestamps: false”,并配置了“created”和“modified”列,如下所示:
创建:DataTypes.DATE,
修改:DataTypes.DATE
这允许我们在需要时提取创建和修改时间,但让 MySQL 数据库根据默认值记录这些值。
如果我使用 findAll 方法做一个简单的查询,那么在返回的数据中,“created”值将作为 UTC 返回,就像它在数据库中一样。但是,“修改”的值不是数据库中的 UTC,而是两个小时后。我当前的时区比 UTC 早两个小时,而且 Sequelize 似乎认为“修改”列在我的本地时区而不是 UTC。当我们想要根据“修改后的”值开始操作数据时,这会导致巨大的问题。
我可以做些什么来在 Sequelize 中纠正这个问题,或者我必须重新考虑数据库表的配置方式。
【问题讨论】:
-
您有存储在 SQL 表中的值的示例吗?和 sequelize 返回的值?时区一般应该是显示的问题,但是如果我理解的很好,你的sql列没有存储时区信息?
标签: sequelize.js