MySQL中的sequelize.js TIMESTAMP而不是DATETIME
在MySQL数据库中,时间类型有两种常见的类型,即TIMESTAMP和DATETIME。至于选择哪种类型,取决于您的预期用途和用例。有时,您会遇到需要更好的性能和更少的存储空间的一些需求。这就是TIMESTAMP类型可以派上用场的地方。
阅读更多:MySQL 教程
TIMESTAMP vs. DATETIME
在MySQL中,DATETIME类型与TIMESTAMP类型非常相似,但有一些主要差别。首先,DATETIME需要8个字节的存储空间,而TIMESTAMP只需要4个字节。意味着可以在使用TIMESTAMP的同时保存更多的数据。此外,TIMESTAMP类型可以存储的范围比DATETIME类型窄,TIMESTAMP类型只能存储1970年到2038年之间的日期和时间。
在实践中,TIMESTAMP类型通常用于跟踪记录的修改时间,例如一个项目的最后修改时间,或者保留某个评论的发表时间。此外,TIMESTAMP类型允许您使用MySQL的内置函数来进行日期和时间计算和比较。
使用sequelize.js将属性设置为TIMESTAMP
当您在使用sequelize.js和MySQL数据库时,您需要明确指定属性类型。在本例中,为了将属性设置为TIMESTAMP类型,需要做以下更改:
在上面的代码示例中,通过运用sequelize.js的DataTypes,将属性类型传递为TIMESTAMP。
TIMESTAMP类型的一些问题
虽然TIMESTAMP比DATETIME更轻便,但是您需要注意的是,TIMESTAMP可能具有UNIX时间戳的限制。如果您需要放置范围超出UNIX时间戳范围的日期和时间,那么DATETIME在这种情况下可能是更好的选择。
此外,就表单输入而言,日期和时间输入不够友好。通常为了向用户和应用程序开发人员提供方便,使用格式掩码和控件来强制指定使用正确的日期和时间格式。如果用户手动输入日期和时间,则需要在后台代码中执行更多的格式转换操作。
无论哪种类型,您的数据访问程序都必须考虑如何将TIMESTAMP或DATETIME值的日期和时间处理转换为人类可读格式。
总结
在MySQL数据库中,TIMESTAMP比DATETIME更轻便,需要的存储空间和所需索引的大小要小得多。在sequelize.js中,默认情况下设置属性数据类型为DATETIME,如果需要设置为TIMESTAMP,只需更改数据类型即可。但是,需要注意的是,如果需要超出UNIX时间戳的时间范围,那么DATETIME可能是比TIMESTAMP更好的选择。