记录 Sequelize 和 MySQL 的一个小坑
之前由于错误数据库设计,表中某一个时间类型设置为了 Date 类型而不是 DateTime。 Sequelize 中的 Model 类型是 DataTypes.Date,但是实际情况并没有转换为 js 的 Date 类型。
概况是
Table
- start_time[Date]
- create_time[DateTime]
导致使用 getTime 方法报错,
const foo = await xx.findByPk(1)
// 报错:foo.startTime.getTime is not a function
console.log(foo.start_time.getTime())
// 正常时间戳
console.log(foo.create_time.getTime())
// typeof foo.start_time == 'string'
// typeof foo.create_time == 'object'
不太清楚其他语言中是否有类似的问题,我记得 Java 应该不会有问题。 但是在 Node MySQL Sequelize 场景下,应该避免使用 Date 数据类型,使用 DateTime 代替,如果必须使用 Date 数据类型,要做好数据类型的转换。
完。
2 回复
typeorm + postgresql ,使用 timestamptz 解决~
有个类型是DataTypes.DATEONLY, 对应MySQL的DATE.