首页 > 代码库 > 日期和时间类型
日期和时间类型
MySQL提供几种时间和日期类型,包括日期和时间类型是DATETIME、DATE、TIMESTAMP、TIME和YEAR。对这几种时间和日期类型概述如下:
DATE
DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以‘YYYY-MM-DD‘格式显示DATE值,支持的范围是‘1000-01-01‘到‘9999-12-31‘。
存储需求:3字节
TIME
取值范围:“-838:59:59”到“838:59:59”
你能用多中格式指定TIME值:
- 作为‘HH:MM:SS‘格式的一个字符串。“宽松”的语法被允许--任何标点符号可用作时间部分的分隔符,例如,‘10:11:12‘和‘10.11.12‘是等价的。
- 作为没有分隔符的‘HHMMSS‘格式的一个字符串,如果它作为一个时间解释。例如,‘101112‘被理解为‘10:11:12‘,但是‘109712‘是不合法的(它有无意义的分钟部分)并变成‘00:00:00‘。
- 作为HHMMSS格式的一个数字,如果它能解释为一个时间。例如,101112被理解为‘10:11:12‘。
存储需求:3字节
DATATIME
DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以‘YYYY-MM-DD HH:MM:SS‘格式显示DATETIME值,支持的范围是‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)
存储需求:8字节
TIMESTAMP[(M)]
TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
- 列没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
- 列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
- 你明确地设定TIMESTAMP列为NULL.
存储需求:4字节
YEAR[(M)]
取值范围:1901到2155
YEAR类型是一个有效的利用1字节类型表示年份。MySQL检索并且以YYYY格式显示YEAR值,其范围是1901到2155。 如果,只想保存日期,那么YEAR比其它类型比如SAMLLINT更为有效。
你能用多种格式指定YEAR值,既可以用4为字符,也可以使用4为字符串,当然要在1901到2155范围之内。
作为YEAR的一个优点是,你可以指定一个在‘00‘到‘99‘范围的2位字符串或者一个在‘00‘到‘69‘和‘70‘到‘99‘范围的值被变换到在2000到2069范围和1970到1999的YEAR值。
存储需求: 1字节
MySQL本身Y2K(Year 2 Kilo)安全的,但是呈交给MySQL的输入值可能不是。一个包含2位年份值的任何输入是由二义性的,因为世纪是未知的。这样的值必须被解释成4位形式,因为MySQL内部使用4位存储年份。对于DATETIME, DATE, TIMESTAMP和YEAR类型,MySQL使用下列规则的解释二义性的年份值:
在范围00-69的年值被变换到2000-2069。
在范围70-99的年值被变换到1970-1999。
记得这些规则仅仅提供对于你数据的含义的合理猜测。如果MySQL使用的启发规则不产生正确的值,你应该提供无二义的包含4位年值的输入。
日期和时间类型