MYSQL数据库date, datatime,timestamp区别在哪?
2021/9/18 19:04:58
本文主要是介绍MYSQL数据库date, datatime,timestamp区别在哪?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我们在建立数据库表结构时候,不可避免的需要增加时间字段,一直以来 我所在的公司都习惯于使用INT型时间戳去记录时间,但是Laravel 框架默认使用timestamp来记录时间。今天咱们就来 探究一下几个时间类型之间的区别。
date | 1000-01-01 至 9999-12-31 | 只有日期,没有时间 |
datatime | 1000-01-01 00:00:00至 9999-12-31 23:59:59 | 时间格式 YY-mm-dd hh:mm:ss,默认精确到秒 |
timestamp | 1970-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 以方便时区问题解决。
这篇关于MYSQL数据库date, datatime,timestamp区别在哪?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程