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
但是数据库对于时间的限制十分宽松,很多别的写法也可以,在此我就不一一列举了,只是下图举个栗子。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN2MDN3ETM2UzM1EzN5YWNzYzXxIjNzcTMxMzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
数据库的数据类型不能精确到微秒级,任何微秒数值都会被数据库截断。不过
mysql
数据库提供了
MICROSECOND
来提取日期中的微秒值,如下图所示。需要注意的是,
mysql
的CAST函数在将日期强转到
DATETIME
时会保留到微秒,不过插入后就同样被截断了。
但是自从
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