时区问题
sequelize 默认情况下,保存日期时会转换成 +00:00时区。
官方文档:
比如,
提交数据:
time=2017-07-17 16:52:12
数据库中会保存成
2017-07-17 08:52:12 // 晚了8个小时
解决方式
初始化Sequelize时,配置时区
timezone: ‘+08:00’
如:
const sequelize = new Sequelize(config.database, config.username, config.password, {host: config.host,port: config.port,dialect: 'mysql',pool: {max: 5,min: 0,idle: 10000},timezone: '+08:00' // 设置成东八区});
但是这样设置仍然不够,存储的是东八区,查询出来的,依然是零时区
终极方案:
不让Sequence帮我们自动生成日期,
在创建文件,更新文档时,手动传入日期。
修改表结构
当数据表结构发生变动后,要同时修改代码中定义的Model,也要修改数据库中的表。
两种方案:
1.修改Model,然后用sequelize.sync方法,强力删除表,再重建。缺点:会删除原来的数据。
2.修改Model,再通过navicat工具修改表结构,代码中不设置sequelize.sync。
肯定选择方案2。
不要通过sequelize去修改。
sequelize 查询字段 驼峰成了下划线
经过sql查询时,驼峰写法会自动转成 下划线 写法,
比如定义的model {
userName: ,
createAt
}
查询时,会变成
select user_name, created_at, from
查询的也是数据库中的 user_name, created_at字段。
所以:
并不是将model定义和数据库中的一致就可以了,比如
model是 {userName},数据库中的字段也是userName。
这样查询不出来的。
因为其实执行的sql语句是:selecte user_name
即要查询的是数据库中的user_name字段。
但是可以通过filed属性,来定义要查的字段:
比如
{userName: {filed: userName}}
这样,查询的时候,就是查 select userName了
