mysql时间类型(datetime timestamp date time)
创建了一个table_name的表,和时间类型有关的四个参数,紧接着往表里插入四条数据。可以发现时区变化之后,timestamp的值会相应的自动发生变化!每种类型数据库都允许null值出现。timestamp与时区有关。datetime与时区无关。
文章目录
一、总览
在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的值会相应的自动发生变化!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)