我们在构建MySQL数据库之后很久就开始使用Sequelize了。我们有两列,"创建"和"修改",存储创建记录的日期和修改记录的时间。
"创建" column的类型为" DATETIME",默认值为" CURRENT_TIMESTAMP"。 "修改"列的类型为" TIMESTAMP"默认值为" ON UPDATE CURRENT_TIMESTAMP"。 MySQL使用UTC存储日期和时间。
在Sequelize的模型中,我们设置" timestamps:false",并配置"创建和"修改"列如下:
created:DataTypes.DATE,
已修改:DataTypes.DATE
这允许我们在需要时拉出创建和修改的时间,但让MySQL数据库根据默认值记录这些值。
如果我要使用findAll方法进行简单查询,那么在返回的数据中,"创建" value返回UTC,就像在数据库中一样。然而,"修改"值不是像数据库中那样的UTC,而是落后两个小时。我目前的时区比UTC早两个小时,看起来像Sequelize认为"修改了"列在我的本地时区而不是UTC。当我们想要开始基于"修改的"来开始操作数据时,这会引起巨大的问题。值。
我有什么办法可以在Sequelize中纠正这个问题,或者我是否必须重新考虑数据库表的配置方式。
答案 0 :(得分:0)
如果使用UTC,则可能不需要时区。
例如,我的mysql服务器是时区“ +08:00”,
“ mysql2”:“ ^ 1.6.4”, “ sequelize”:“ ^ 4.41.2”
const sequelize = new Sequelize(database, username, password, {
host: hostname,
port: port,
dialect: 'mysql',
dialectOptions: {
typeCast: function (field, next) {
if (field.type == 'DATETIME' || field.type == 'TIMESTAMP') {
return new Date(field.string() + 'Z');
}
return next();
}
},
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});