Schema的优化和索引 - 选择最佳的数据类型 - 日期和时间类型

日期和时间类型

 

MySQL对于不同种类的日期和时间有很多的数据类型,比如YEAR和DATE。MySQL可保存时间颗粒度是一秒。然而,时间的计算可以精确到毫秒。我们将会教你如何解决存储引擎的局限性。

 

大部分时间类型都没有什么可选择的。所以那个是最佳的选择不是一个问题。只有一个问题那就是当你即要保存日期也要保存时间的时候,将要做什么。MySQL提供了两个类型来满足这个需求:DATETIME和TIMESTAMP.对许多应用而言,任意一个都可以,但是在一些案例中,一个要好于另一个。让我们来看看:

 

DATETIME

这个类型可以保存大范围的值。从1001到9999.精度精确到了秒。它保存日期和时间压缩到为YYYYMMDDHHMMSS格式的整型,独立的时间区域。这会占用8字节的存储空间。

 

默认的MySQL显示DATETIME为排序的,清晰地格式,比如2008-01-16 22:37:08。这是符合ANSI标准的日期和时间。

 

TIMESTAMP

就像名字所提示的一样,TIMESTAMP类型存储了从1970 1.1 开始所经过秒的数量-这个UNIX的TIMESTAMP是一样的。因此它的范围要比DATATIME要小一些:从1970年到2038年。MySQL提供了FROM_UNIXTIME和UNIX_TIMESTAMP函数,用来把Unix的timestamp转为data,反之亦然。

 

新版的MySQL的TIMESTAMP值像DATETIME.但是旧版MySQL显示它们没有任何的标点。仅仅是显示格式的不同。TIMESTAMP存储在MySQL的方式在所有MySQL版本中都是一样的。

 

TIMSTAMP的现实也依赖于时区。MySQL服务器,操作系统,客户端连接所有的都有时区的设置。因此,一个TIMESTAMP存值为0,实际显示的是东部夏令时间,1969-12-31 19:00:00。相对GMT有5个时差。

 

TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当你插入一条记录并没有指定这个值,MySQL会把TIMESTAMP列设为当前的时间。当你更新这一行的时候,MySQL也会更新TIMESTAMP列。除非你给TIMESTAMP指定一个值。对于任意的TIMESTAMP,你可以配置插入和更新的行为。最终,TIMESTAMP列默认不能为NULL.这点和其他的类型有所不同。

 

 

先撇特殊行为不谈,一般来说,如果能用TIMESTAMP就应该用,因为它空间上比DATETIME更有效用。有的时候人们用整型来存储UNIX的TIMESTAMP,但是这么做不能带来什么好处。这么做也不太容易去处理,我们不建议这么做。

 

怎样保存比秒更精确的时间?MySQL还没有这些数据类型,但你可以使用你自己的存储类型:你可以使用BIGINT类型并且存储这个值作为在微妙级别的TIMESTAMP,或者你可以使用DOUBLE并且存储小数点之后的秒的小数部分。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值