MYSQL数据库date, datatime,timestamp区别在哪?

我们在建立数据库表结构时候,不可避免的需要增加时间字段,一直以来 我所在的公司都习惯于使用INT型时间戳去记录时间,但是Laravel 框架默认使用timestamp来记录时间。今天咱们就来 探究一下几个时间类型之间的区别。

date1000-01-01 至 9999-12-31只有日期,没有时间
datatime1000-01-01 00:00:00至 9999-12-31 23:59:59时间格式 YY-mm-dd hh:mm:ss,默认精确到秒
timestamp1970-01-01 00:00:00 UTC至 2038-01-19 03:14:07 UTC同上

总表格中,可以看出,他们在时间范围以及格式上的不同,现在新建2张表


CREATE TABLE `test`(

 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `create_at`TIMESTAMP,
 PRIMRY KEY(`id`)   
) ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT ='表1';



CREATE TABLE `test1`(

 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
 `create_at`DATETIME,
 PRIMRY KEY(`id`)   
) ENGINE=INNODB DEFAULT CHARSET=UTF8 COMMENT ='表2';

 1.当新增时间 2050年时间时候

insert test (id,create_at) VALUES(2,'2050-09-18 00:00:00');

insert test1 (id,create_at) VALUES(2,'2050-09-18 00:00:00');

 我们会看到 test表是无法存储的,会提示

Incorrect datetime value: '2050-09-18 00:00:00' for column 'create_at' at row 1

但是test1可以成功存储,这也是因为时间范围原因导致的。

2.时区处理不同

对于timestamp ,他将客户端插入的时间从当前时区转换为UTC进行存储,查询时候,又将其转换为客户端时间进行返回。而对于datetime,不做任何改变,基本上是原样输入和输出。

我们先看一下当前服务器时区

show VARIABLES like "%time_zone%"

结果

我们看一下没修改时区之前的查询结果:

都是表里面存储的9月18日

下面我们修改一下时区

 

 

 

 我看看到test表的 creat_at字段 查询结果已经是 9月17了,而test1表数据并没有改变。

我想应该是Laravel是一个外国人开发的框架,并且在世界范围内使用这都很多,所以使用了timestamp 以方便时区问题解决。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值