WEB开发网
开发学院数据库MySQL Schema的优化和索引 - 选择最佳的数据类型 - 日期... 阅读

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

 2009-09-02 00:00:00 来源:WEB开发网   
核心提示:日期和时间类型MySQL对于不同种类的日期和时间有很多的数据类型,比如YEAR和DATE,Schema的优化和索引 - 选择最佳的数据类型 - 日期和时间类型,MySQL可保存时间颗粒度是一秒,然而,怎样保存比秒更精确的时间?MySQL还没有这些数据类型,但你可以使用你自己的存储类型:你可以使用BIGINT类型并且存储

日期和时间类型

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并且存储小数点之后的秒的小数部分。

Tags:Schema 优化 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接