本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
目录
今天阿文介绍的内容
- MySQL中日期与时间类型
1.日期与时间类型
MySQL中有多种表示日期的数据类型,主要有:
DATETIMEDATETIMESTAMPTIMEYEAR
下表列出了MySQL中的日期与时间类型。
1.1YEAR
YEAR类型是一个单字节类型,用于表示年,在存储时只需要1字节。
-
以4位字符串或者4位数字格式表示的YEAR,范围为‘1901’~‘2155’。输入格式为
'YYYY'或者YYYY。例如,输入'2010'或2010,插入到数据库的值均为2010。 -
以2位字符串格式表示的YEAR,范围为‘00’到‘99’。
‘00’~‘69’和‘70’~‘99’范围的值分别被转换为2000~2069和1970~1999范围的YEAR值。‘0’与‘00’的作用相同。插入超过取值范围的值将被转换为2000。 -
以2位数字表示的YEAR,范围为1~99。
1~69和70~99范围的值分别被转换为2001~2069和1970~1999范围的YEAR值。注意:在这里0值将被转换为0000,而不是2000。非法YEAR值将被转换为0000。
1.2TIME
TIME类型用在只需要时间信息的值,在存储时需要3字节,格式为‘HH:MM:SS’。其中,HH表示小时,MM表示分钟,SS表示秒。
-
'D HH:MM:SS'格式的字符串。可以使用下面任何一种“非严格”的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH:MM’、‘D HH’或‘SS’。这里的D表示日,可以取0~34之间的值。在插入数据库时,D被转换为小时保存,格式为“D*24+HH”。 -
'HHMMSS'格式的、没有间隔符的字符串或者HHMMSS格式的数值,假定是有意义的时间。例如:‘101112’被理解为‘10:11:12’,但‘109712’是不合法的(它有一个没有意义的分钟部分),存储时将变为00:00:00。 -
使用CURRENT_DATE或者NOW(),插入当前系统时间。
提示:
为TIME列分配简写值时应注意:如果没有冒号,MySQL解释值时,假定最右边的两位表示秒。(MySQL解释TIME值为过去的时间而不是当天的时间。)例如,读者可能认为‘1112’和1112表示11:12:00(11点12分),但MySQL将它们解释为00:11:12(11分12秒)。同样‘12’和12被解释为00:00:12。相反,TIME值中如果使用冒号则肯定被看作当天的时间。也就是说,‘11:12’表示11:12:00,而不是00:11:12。在使用‘D HH’格式时,
小时一定要使用双位数值,如果是小于10的小时数,应在前面加0。
1.3DATE类型
DATE类型用在仅需要日期值时,没有时间部分,在存储时需要3字节。日期格式为‘YYYY-MM-DD’。其中,YYYY表示年,MM表示月,DD表示日。在给DATE类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATE的日期格式即可。
-
以
‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示的日期,取值范围为‘1000-01-01’~‘9999-12-3’。例如,输入‘2012-12-31’或者‘20121231’,插入数据库的日期都为2012-12-31。 -
以
‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,在这里YY表示两位的年值。包含两位年值的日期会令人模糊,因为不知道世纪。MySQL使用以下规则解释两位年值:‘00~69’范围的年值转换为‘2000~2069’;‘70~99’范围的年值转换为‘1970~1999’。例如,输入‘12-12-31’,插入数据库的日期为2012-12-31;输入‘981231’,插入数据的日期为1998-12-31。 -
以
YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,00~69范围的年值转换为2000~2069,70~99范围的年值转换为1970~1999。例如,输入12-12-31插入数据库的日期为2012-12-31;输入981231,插入数据的日期为1998-12-31。 -
使用CURRENT_DATE或者NOW(),插入当前系统日期。
提示:
MySQL允许“
不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,‘98-11-31’、‘98.11.31’、‘98/11/31’和‘98@11@31’是等价的,这些值也可以正确地插入到数据库中。
1.4DATETIME
DATETIME类型用于需要同时包含日期和时间信息的值,在存储时需要8字节。日期格式为‘YYYY-MM-DD HH:MM:SS’。其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分钟,SS表示秒。在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATETIME的日期格式即可。
-
以
‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范围为‘1000-01-01 00:00:00’~‘9999-12-323:59:59’。例如,输入‘2012-12-31 05: 05: 05’或者‘20121231050505’,插入数据库的DATETIME值都为2012-12-31 05: 05: 05。 -
以
‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值。与前面相同,‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’。例如,输入‘12-12-31 05: 05: 05’,插入数据库的DATETIME为2012-12-31 05: 05: 05;输入‘980505050505’,插入数据库的DATETIME为1998-05-05 05: 05: 05。 -
以
YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。例如,输入20121231050505,插入数据库的DATETIME为2012-12-31 05:05:05;输入981231050505,插入数据的DATETIME为1998-12-31 05:05: 05。 -
使用CURRENT_DATE或者NOW(),插入当前系统日期和时间。
提示:
MySQL允许“
不严格”语法:任何标点符号都可以用作日期部分或时间部分之间的间隔符。例如,‘98-12-3111:30:45’、‘98.12.31 11+30+45’、‘98/12/31113045’和‘98@12@31 11^30^45’是等价的,这些值都可以正确地插入数据库。
1.5TIMESTAMP
TIMESTAMP的显示格式与DATETIME相同,显示宽度固定在19个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要4字节。TIMESTAMP列的取值范围小于DATETIME的取值范围,为‘1970-01-01 00:00:01’UTC~‘2038-01-19 03:14:07’UTC。其中,UTC为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。
提示:
TIMESTAMP与DATETIME除了存储字节和支持的范围不同外,还有一个最大的区别就是:DATETIME在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;而TIMESTAMP值的存储是以UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。查询时,不同时区显示的时间值是不同的。 如果为一个DATETIME或TIMESTAMP对象分配一个DATE值,那么结果值的时间部分将被设置为‘00:00:00’,因为DATE值未包含时间信息。如果为一个DATE对象分配一个DATETIME或TIMESTAMP值,那么结果值的时间部分将被删除,因为DATE值未包含时间信息。。默认的情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。
总结
- 在MySQL中时间与日期类型包含YEAR、TIME、DTAE、DATETIME和TIMESTAMP,一共5种类型,每种都有各自的赋值规则
- MySQL运行
不严格语法
OK,今天内容有点多,阿文就介绍到这里啦,溜了...