选择优化的数据类型 (五)日期和时间类型

mysql提供了两种相似的数据类型:DATETIME和TIMESTAMP.对于很多应用,它们都能工作,但是在某些情况下,一种会好于另一种

DATETIME:

从1001到9999年,精度为秒。它把日期和时间封装到一个格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用了8字节存储空间。

在默认情况下,mysql以一种可排序的,清楚的格式显示DATETIME值,例如2012-08-28 18:18:18。这种表示日期和时间的方式符合ANSI标准。


TIMESTAMP:

这和时间戳相同,只使用4个字节的存储空间,但它的范围比DATETIME小很多,1970到2038年。mysql提供了FROM_UNIXTIME()函数把Unix时间戳转换为日期,并提供了UNIX_TIMESTAMP()函数,把日期转换为Unix时间戳。


TIMESTAMP显示的值依赖于时区。mysql服务器,操作系统及客户端连接都有时区设置。


在默认情况下,如果插入的行没有定义TIMESTAMP的值,mysql就会把它设置为当前时间。在更新的时候,如果没有显式地定义TIMESTAMP列的值,mysql也会自动更新它。可以配置TIMESTAMP列的插入和更新行为。最后,TIMESTAMP列默认是NOT NULL,这和其他数据类型都不一样。


通常情况下应该使用TIMESTAMP,因为它比DATETIME更节约空间。有时人们把Unix的时间戳保存为整数值,但是这通常没有任何好处。因为这种格式处理起来不太方便。我们并不推荐它。


如果需要以秒以下的精度保存日期和时间?mysql当前没有适合的数据类型,但是可以使用自己的存储格式,可以使用BIGINT类型并且把它以毫秒的精度保存为时间戳格式,或者使用DOUBLE保存秒的分数部分。两种方法都不错。

你可能感兴趣的:(Timestamp,DateTime)