如何在 sequelize 标准 createdAt 字段中使用毫秒?
Posted
技术标签:
【中文标题】如何在 sequelize 标准 createdAt 字段中使用毫秒?【英文标题】:How to use milliseconds in sequelize standard createdAt field? 【发布时间】:2018-05-24 23:03:55 【问题描述】:在 Nodejs 应用程序中,我使用 Sequelize ORM 将记录写入 mysql 数据库。默认情况下,每个表都有一个 createdAt 字段,但它只记录日期时间和秒:
mysql> SELECT createdAt FROM ticks LIMIT 3;
+---------------------+
| createdAt |
+---------------------+
| 2017-11-08 16:34:21 |
| 2017-11-08 16:34:15 |
| 2017-11-08 16:34:27 |
+---------------------+
3 rows in set (0.00 sec)
由于我正在运行一项对时间非常敏感的服务,我还想记录毫秒。在docs I found the data types,其中包括:
Sequelize.DATE(6) // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision
我从不明确写 createdAt 字段(Sequelize 会自动执行此操作),所以我不确定如何使写毫秒。
谁能指出我正确的方向,以使用毫秒精度使用 createdAt 字段保存记录?欢迎所有提示!
【问题讨论】:
【参考方案1】:我更新了模型并创建了一个迁移以利用毫秒:
型号:
import Sequelize from 'sequelize'
class Ticks extends db.instance.Model
static init(sequelize)
return super.init(
.
.
createdAt:
allowNull: false,
type: Sequelize.DATE(6)
)
迁移:
export default
up: (queryInterface, Sequelize) => queryInterface
.changeColumn('ticks', 'createdAt',
allowNull: false,
type: Sequelize.DATE(6)
),
down: (queryInterface, Sequelize) => queryInterface
.changeColumn('ticks', 'createdAt',
allowNull: false,
type: Sequelize.DATE
)
(使用 ES6 语法)
通过这些更改,我能够让毫秒工作(尽管它似乎只有 3 个地方,尽管我指定了 6 个)
【讨论】:
【参考方案2】:您可以在模型中明确定义createdAt
,例如:
id:
type: Sequlieze.INTEGER(11).UNSIGNED,
autoIncrement: true,
primaryKey: true
,
...
...
createdAt:
type: schema.DATE(6),
allowNull: true,
defaultValue: Sequelize.fn('NOW')
或将其重命名为:
created_ts:
type: schema.DATE(6),
allowNull: true,
defaultValue: Sequelize.fn('NOW')
,
createdAt: created_ts
【讨论】:
这个 defaultValue 规范对我不起作用...以上是关于如何在 sequelize 标准 createdAt 字段中使用毫秒?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SEQUELIZE (nodeJS) 中创建触发器?