ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-09-18 18:32:42  阅读:178  来源: 互联网

标签:test1 00 datatime timestamp create 01 MYSQL id


我们在建立数据库表结构时候,不可避免的需要增加时间字段,一直以来 我所在的公司都习惯于使用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 以方便时区问题解决。

 

标签:test1,00,datatime,timestamp,create,01,MYSQL,id
来源: https://blog.csdn.net/uknow0904/article/details/120371440

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有