一、总览

在MySQL中,有几种不同的时间相关数据类型可以用来存储日期和时间。以下是主要的几种类型及其用途:

1. DATE:

用于存储日期值,格式为 ‘YYYY-MM-DD’。
范围从 ‘1000-01-01’ 到 ‘9999-12-31’。

2. TIME:

用于存储时间值,格式为 ‘HH:MM:SS’ 或 ‘HHMMSS’。
范围从 ‘-838:59:59’ 到 ‘838:59:59’。

3. DATETIME:

用于存储日期和时间的组合,格式为 ‘YYYY-MM-DD HH:MM:SS’。
范围从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。

4. TIMESTAMP:

用于存储日期和时间的组合,但其范围比 DATETIME 小,格式同样为 ‘YYYYMMDDHHMMSS’ 或 ‘YYYY-MM-DD HH:MM:SS’。
范围从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC。

TIMESTAMP 类型的一个特性是它可以自动更新为当前的日期和时间。如果一个表中有 TIMESTAMP 字段,并且至少有一个字段被设置为默认值 CURRENT_TIMESTAMP,那么这个字段会在插入新行或更新行时自动更新为当前时间。

选择使用哪种类型取决于你的具体需求。例如,如果你只需要存储日期而不需要时间部分,那么 DATE 类型就足够了。如果你需要记录精确到秒的时间戳,并且可能跨越较长的时间周期,那么 DATETIME 可能是更好的选择。

TIMESTAMP 在需要记录事件发生的时间,并且希望该时间能自动更新的情况下非常有用,但是需要注意它的范围限制。

二、mysql四种时间类型

首先创建一个表用于测试,举例:

create table table_name
(
    id         int auto_increment
        primary key,
    dateTime1 	datetime  null,
    date1 		date      null,
    timeStamp1 	timestamp null,
    time1 		time      null
);
insert into table_name(dataTime1, timeStamp1, date1, time1)values ('2021-12-27 17:21:31', null, null, null);

insert into table_name(dataTime1, timeStamp1, date1, time1)values (null, '2021-12-27 17:21:31', null, null);

insert into table_name(dataTime1, timeStamp1, date1, time1)values (null, null, '2021-12-27', null);

insert into table_name(dataTime1, timeStamp1, date1, time1)values (null, null, null, '17:21:31');

说明:创建了一个table_name的表,和时间类型有关的四个参数,紧接着往表里插入四条数据。不难发现其实每种类型数据库都允许null值出现

1. datetime

select * from table_name where dataTime1 > '2021-12-26 17:21:31';select * from table_name where dataTime1 > timestamp('2021-12-26 17:21:30');

查询结果都是:
请添加图片描述

2. date

select * from table_name where date1 > date ('2021-12-26 17:21:30');select * from table_name where date1 > '2021-12-26 17:21:30';select * from table_name where date1 > '2021-12-26';

查询结果都是:
请添加图片描述

3. timestamp

select * from table_name where timeStamp1 > timestamp ('2021-12-26 17:21:30');select * from table_name where timeStamp1 > '2021-12-26 17:21:30';

查询结果都是:
请添加图片描述

4. time

select * from table_name where time1 > time('2021-12-26 17:21:30');select * from table_name where time1 > '17:21:30';

查询结果都是:
请添加图片描述

5. datetime和timestamp区别

  • datetime、timestamp精确度都是秒,
  • datetime与时区无关,存储的范围广(1001-9999),
  • timestamp与时区有关,存储的范围小(1970-2038)。
    举例:查询表中所有内容
select * from table_name;

结果(当前时区为东八区)请添加图片描述
修改mysql时区后再次查询

set time_zone ='+0:00';			//修改时区

请添加图片描述
总结:可以发现时区变化之后,timestamp的值会相应的自动发生变化!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐