В приложении Nodejs я использую Sequelize ORM для записи записей в базу данных mysql. По умолчанию каждая таблица имеет поле createdAt, но только запись datetime с секундами:
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)
Поскольку у меня работает очень чувствительная служба, я также хотел бы записать миллисекунды. В документах я нашел типы данных, которые включают:
Sequelize.DATE(6) // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision
Я никогда явно не писал поле createdAt, хотя (Sequelize делает это автоматически), поэтому я не уверен, как это сделать, чтобы писать миллисекунды.
Может ли кто-нибудь указать мне в правильном направлении сохранить записи в поле createdAt с использованием миллисекундной точности? Все советы приветствуются!
Я обновил модель и создал миграцию для использования миллисекунд:
Модель:
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)
И с этими изменениями мне удалось заставить миллисекунды работать (хотя, похоже, это всего лишь три места, хотя я указал 6)
Вы можете определить 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
}