日期和时间类型Datetime vs Timestamp

Mysql可以使用许多类型来保存日期和时间值,例如YEAR和DATE。Mysql能存储的最小时间粒度为秒(MariaDB支持微秒级别的时间类型)。 大部分时间类型都没有替代品,因此没有什么是最佳选择的问题。唯一的问题是保存日期和时间的时候需要做什么。Mysql提供两种相似的日期类型:DATATIME和TIMESTAMP。对于很多应用程序,它们都能工作,但是在某些场景,一个比另一个工作得好。

DATETIME

这个类型保存大范围的值,从1001到9999年,精度为秒。它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。默认情况下,Mysql以一种可排序的、无歧义的格式显示DATATIME值。如“2008-03-10 13:55:00”。这是ANSI标准定义的日期和时间表示方法。

TIMESTAMP

TIMESTAMP类型保存了从1970年1月1日午夜(格林尼治标准时间)以来的秒数,它和UNIX时间戳相同。TIMESTAMP只使用4个字节的存储空间,因此它的范围比DATATIME小得多:只能表示1970年到2038年。MYSQL4.1以及更新的版本按照DATATIME的方式格式化TIMESTAMP的值,因此,在客户端查询这两种值表现的样式是一样的。MYSQL4.0以及更老的版本不会在各个部分之间显示任何标点符号。这仅仅是显示格式上的区别。TIMESTAMP的显示值也依赖于时区。MYSQL服务器、操作系统,以及客户端连接都有时区设置。

除了特殊行为之外,通常也应该尽量使用TIMESTAMP,因为它比DATATIME空间效率更高。有时候人们会将UNIX时间戳存储为整数值,但这不会带来任何收益。用整数保存时间戳的格式通常不方便处理。

如果要存储比秒更小的粒度,可以使用BIGINT类型存储微秒级别的时间戳,或者使用DOUBLE存储秒之后的小数部分。或者使用MariaDB代替MYSQL。

1+

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据