在MySQL中,日期与时间类型用于存储和操作日期和时间数据。这些类型根据所需存储的信息的精确度和范围而有所不同。
YEAR
类型YYYY
),但MySQL也支持2位年份格式(YY
),不过这种格式已经不推荐使用。
YEAR
类型,其格式为YYYY
,最小值为1901
,最大值为2155
。YEAR
类型,最小值为00
,最大值为99
。 01
到69
时,表示2001
到2069
;70
到99
时,表示1970
到1999
;0
或00
添加的话,那么是0000
年;'0'
添加的话,是2000
年。从MySQL5.5.27开始,2位格式的YEAR
已经不推荐使用。YEAR
默认格式就是YYYY
,没必要写成YEAR(4)
,从MySQL 8.0.19开始,不推荐使用指定显示宽度的YEAR(4)
数据类型。
TIME
类型HH:MM:SS
,其中HH
表示小时,MM
表示分钟,SS
表示秒。-838:59:59
~838:59:59
。TIME类型不仅可以表示一天之内的时间(必须小于24小时),还可以表示某个事件过去的时间或两个事件之间的时间间隔(可大于24小时,甚至为负)。D HH:MM:SS'
、‘HH:MM:SS
’、‘HH:MM
’、‘D HH:MM
’、'D HH
’或’SS
’格式,都能被正确地插入 TIME
类型的字段中。其中D
表示天,其最小值为0
,最大值为34
。如果使用带有D
格式的字符串插入TIME
类型的字段时,D
会被转化为小时,计算格式为D*24+HH
。当使用带有冒号并且不带D
的字符串表示时间时,表示当天的时间,比如12:10
表示12:10:00
,而不是00:12:10
。HHMMSS
’或者HHMMSS
。如果插入一个不合法的字符串或者数字,MySQL在存储数据时,会将其自动转化为00:00:00
进行存储。比如1210
,MySQL会将最右边的两位解析成秒,表示00:12:10
,而不是12:10:00
。CURRENT_TIME()
或者NOW()
,会插入当前系统的时间。DATE
类型YYYY-MM-DD
,其中YYYY
表示年份,MM
表示月份,DD
表示日期。1000-01-01
~9999-12-31
。YYYY-MM-DD
或YYYYMMDD
格式的字符串。YY-MM-DD
或YYMMDD
格式的字符串,其中YY
表示两位的年值,MySQL会根据规则将其转换为4位年份。CURRENT_DATE()
或NOW()
函数插入当前系统日期。DATETIME
类型YYYY-MM-DD HH:MM:SS
。1000-01-01 00:00:00
~9999-12-31 23:59:59
。YYYY-MM-DD HH:MM:SS
或YYYYMMDDHHMMSS
格式的字符串。YY-MM-DD HH:MM:SS
或YYMMDDHHMMSS
格式的字符串,其中YY
表示两位的年值。TIMESTAMP
类型YYYY-MM-DD HH:MM:SS
。1970-01-01 00:00:01 UTC
~2038-01-19 03:14:07 UTC
。TIMESTAMP
值的存储是以UTC
(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。TIMESTAMP
和DATETIME
的区别: TIMESTAMP
存储空间比较小,表示的日期时间范围也比较小TIMESTAMP
底层存储的是毫秒值,距离1970-1-1 0:0:0 0
毫秒的毫秒值。TIMESTAMP
更方便、更快。TIMESTAMP
和时区有关。TIMESTAMP
会根据用户的时区不同,显示不同的结果。而DATETIME
则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。TIME
或DATE
类型以减少存储空间的使用。TIMESTAMP
类型。通过了解这些日期与时间类型及其特点和用法,您可以更好地设计数据库以满足各种存储和操作需求。
用得最多的日期时间类型,就是 DATETIME
。虽然 MySQL 也支持 YEAR
(年)、 TIME
(时间)、DATE
(日期),以及 TIMESTAMP
类型,但是在实际项目中,尽量用 DATETIME
类型。因为这个数据类型包括了完整的日期和时间信息,取值范围也最大,使用起来比较方便。毕竟,如果日期时间信息分散在好几个字段,很不容易记,而且查询的时候,SQL 语句也会更加复杂。
此外,一般存注册时间、商品发布时间等,不建议使用DATETIME
存储,而是使用时间戳
,因为DATETIME
虽然直观,但不便于计算。