引言
在使用Mysql的过程中,我们经常需要创建一些和时间有关的属性,Timestamp和Datetime应该是我们设置的最多的两种类型,在使>用的过程中,可能这两种不同类型的时间都达到了我们想要目标,但是,作为一个在开发过程中不可或缺的一份子,我们还是很有必要去深入的>了解一下他们的区别和联系的,下面我们就来简单的学习一下这两种不同的时间类型。
联系
它们俩的相同的地方其实挺少的,所以我们先把他们相同的地方来梳理一下:
- 两者都可以表示从年月日时分秒一直到毫秒的日期类型,他们都是日期和时间的组合
区别
它们的虽然外在表现是相同的,但是他们的底层的区别还是很多的,下面我们就一一道来:
- 数据库的存储方式不同:Timestamp在存储的时候会先将本地时间转换为世界标准时间(UTC),然后在进行存储,在查询的时候也会根据当前>系统设置的时区,将数据库中存储的世界标准时间转换为当前时区对应的时间;Datetime在进行存储的时候没有进行任何的转换,基本是原样存>储和获取的。所以当我们开发的项目可能会涉及到时区变化的时候,我们就要优先考虑Timestamp啦。
- 存储的时间范围不同:Timestamp是通过4个字节来存储的,相比而言空间利用率更高一些,但是相应的弊端也是有的,那就是它的时间范围为>:1970-01-010 0:00:00.000000 到 2038-01-19 03:14:07.999999;Datetime是通过8个字节来存储的,所以可以存储范围更大: 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999
- 自动更新机制不同:Timestamp可以通过CURRENT_TIMESTAMP来将默认值设置为当前时间,通过ON UPDATE CURRENT_TIMESTAMP设置为当字段更新
的时候自动将值更新为当前时间,这个处理的机制是自动初始化和自动更新,这个和数据库的explicit_defaults_for_timestamp属性有关,我们
可以通过设置该属性的值来取消数据库对Timestamp的自动初始化和自动更新;Datetime在比较早期的版本是没有这个机制的,不过从Mysql的5.6版本之后,Datetime也支持了CURRENT_TIMESTAMP这种自动初始化的方式。