MySQL数据类型之DATE,DATETIME和TIMESTAMP研究

一、介绍

DATE:DATE类型用于具有日期部分但没有时间部分的值。MySQL DATE'YYYY-MM-DD'格式检索和显示 值 。支持的范围是 '1000-01-01'到 '9999-12-31'

DATETIME:DATETIME类型用于包含日期和时间部分的值。MySQL DATETIME'YYYY-MM-DD hh:mm:ss'格式检索和显示 值。支持的范围是 '1000-01-01 00:00:00''9999-12-31 23:59:59'

TIMESTAMP:TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 TIMESTAMP支持的范围是'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC 。

注:因为DATE类型只包含日期部分,因此此处不做过多介绍,我们主要针对DATETIME和TIMESTAMP来研究

二、DATETIME和TIMESTAMP相同点

DATETIMETIMESTAMP 都可以跟小数部分(可以精确到微秒)。MySQL在插入到一个DATETIME或一 TIMESTAMP,列中的值的任何小数部分都被存储而不是被丢弃。包含小数部分时,DATETIME和TIMESTAMP的格式都是'YYYY-MM-DD hh:mm:ss[.fraction]',小数部分应始终与其余时间使用小数点分隔。

三、DATETIME和TIMESTAMP不同点

DATETIME的范围是'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999';

TIMESTAMP的范围是'1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'。

MySQL将TIMESTAMP当前时区的值转换为UTC进行存储,然后从UTC转换回当前时区进行检索。默认情况下,每个连接的当前时区是服务器的时间。可以基于每个连接设置时区。只要时区设置保持不变,您就会获得存储的相同值。如果存储TIMESTAMP值,然后更改时区并检索值,则检索的值与存储的值不同。发生这种情况是因为在两个方向上都没有使用相同的时区进行转换。

四、实战

1.建表

create table test(timestamp timestamp(3), datetime datetime(3));

2.数据精确到毫秒

insert into test(timestamp , datetime) values(now(3), current_timestamp(3));
select * from test

结果如图:

MySQL数据类型之DATE,DATETIME和TIMESTAMP研究_第1张图片

注:MySQL中表现当前时间的方式有

CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()、NOW()、LOCALTIME、LOCALTIME()、LOCALTIMESTAMP、LOCALTIMESTAMP()

3.验证timestamp是将当前时区的值转化为UTC存储,而datetime不是

3.1查看当前时区

show variables like '%time_zone%'; 

3.2修改时区

set time_zone='+0:00';

3.3查看之前插入的记录,可以发下之前插入的记录timestamp少了8小时

MySQL数据类型之DATE,DATETIME和TIMESTAMP研究_第2张图片

4.验证TIMESTAMP与DATETIME时间范围不一样

4.1验证DATETIME

4.1.1未超出DATETIME范围,超出STIMESTAMP范围

insert into test(datetime) values('20501111000000.005');

结果如图:

MySQL数据类型之DATE,DATETIME和TIMESTAMP研究_第3张图片

4.1.2超出DATETIME范围

insert into test(datetime) values('100001111000000.005');

结果如图:

4.2验证STIMESTAMP

insert into test(timestamp) values ('20381212000000.007');

结果如图:

 

注:关于TIMESTAMP和DATETIME的自动初始化和更新下节更新

你可能感兴趣的:(数据库)