天天看点

mysql的五种日期与时间类型详解

mysql五种数据类型如下:

类型 所占空间
DATETIME 8Byte
DATE 3Byte
TIMESTAMP 4Byte
YEAR 1Byte
TIME 3Byte
  • DATETIME 和 DATE
类型 范围
DATETIME 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
DATE 1000-01-01 ~ 9999-12-31

其基本格式为​

​YYYY-MM-DD HH:MM:SS​

​ 但是数据库对于时间的限制十分宽松,很多别的写法也可以,在此我就不一一列举了,只是下图举个栗子。

mysql的五种日期与时间类型详解

数据库的数据类型不能精确到微秒级,任何微秒数值都会被数据库截断。不过​

​mysql​

​​数据库提供了​

​MICROSECOND​

​​来提取日期中的微秒值,如下图所示。需要注意的是,​

​mysql​

​​的CAST函数在将日期强转到​

​DATETIME​

​时会保留到微秒,不过插入后就同样被截断了。

mysql的五种日期与时间类型详解

但是自从​

​mysql 5.6.4​

​​ 以来,​

​mysql​

​增加了对秒的小数部分的支持,语法为:

type_name (fsp)      

​type_name​

​​可以是 ​

​TIME​

​​, ​

​DATETIME​

​​, ​

​TIMESTAMP​

​​,​

​fsp​

​​表示秒的精度,默认为​

​0​

​​,其范围为​

​0-6​

​​,表示有几位小数。时间函数​

​CURTIME()​

​​, ​

​SYSDATE()​

​​, ​

​UTC_TIMESTAMP()​

​​也增加了对​

​fsp​

​的支持。

下面举一个简单的例子就很容易理解了。

  • TIMESTAMP

    ​timestamp​

    ​ 的结果和​

    ​datetime​

    ​ 是一样的,但是​

    ​timestamp​

    ​占4Byte,范围为:

    ​1970-01-01 00:00:00 ~ 2038-01-19 03:14:07​

    ​ 它保存的是这个时间距离​

    ​1970-01-01 00:00:00​

    ​的毫秒数。

    ​Timestamp​

    ​和​

    ​datetime​

    ​还有些区别:

    (1)在建表时,​

    ​Timestamp​

    ​可以为日期设置一个默认值,而​

    ​datetime​

    ​不行;

    (2)在更新表时,​

    ​Timestamp​

    ​可以设置为自动更新时间为当前时间。
  • YEAR 和 TIME

    ​YEAR​

    ​占一个字节,范围为 ​

    ​1901 ~ 2155​

    ​​

    ​TIME​

    ​占三个字节,范围为 ​

    ​-838:59:59 ~ 838:59:59​

    ​可以看到​

    ​TIME​

    ​类型不仅小时数可以大于​

    ​23​

    ​,甚至可以保存负数,这是因为​

    ​TIME​

    ​不仅仅可以保存一天的时间,还可以用来保存时间间隔。

    ​TIME​

    ​和​

    ​DATETIME​

    ​一样,可以显示微秒时间,只是插入时同样会被截断。