defaultValue:sequlize.NOW 插入mysql后时间差8个小时

nodejs+mysql+sequlize,
定义数据model的时候使用如下:
createTime: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },

但是实际插入的时间总是和现在相隔8个小时,
已经在mysql中设置过时区,进去mysql查询到的时间是正常的,但是不知道为什么defaultValue会少8个时间,不知道有没有人见过这个问题

clipboard.png

阅读 5.9k
2 个回答

https://segmentfault.com/q/10...
在小伙伴的帮助下找到了相关答案,详情参考以上链接的第一条回复。

大致总结就2种方法:
1.
const Sequelize = require('sequelize');

const sequelize = new Sequelize('dbname', 'username', 'password', {

host: 'localhost', 
dialect: 'mysql',
pool: {
    max: 50,
    min: 0,
    idle: 10000
},
timezone: '+08:00' //东八时区

});

2.
程序中设置process.env.TZ = 'Asia/Shanghai';
const Sequelize = require('sequelize');

const sequelize = new Sequelize('dbname', 'username', 'password', {

host: 'localhost', 
dialect: 'mysql',
pool: {
    max: 50,
    min: 0,
    idle: 10000
},
timezone: process.env.TZ 

});

之前在做的就是这种,因为设置了环境变量却依旧得不到正确的时间,以为是数据库的问题。后面看到API才知道,需要在sequlize里面引用,否则没用。

应该还是时区的问题,UTC,东八区CST,看下这篇文章中JS与MySQL之间转换造成的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏