DATETIME 和 TIMESTAMP 的区别

57 阅读1分钟

最近我从阿里的开发手册里面看到这样一段话,意思是时间格式的字段一般使用DATETIME,如果要记录涉及时区的信息,那么字段类型可以设置为TIMESTAMP。记录下来以后有个印象。

1.表示范围不同

DATETIME:1000-01-01 00:00:00  9999-12-31 23:59:59 
TIMESTAMP:1970-01-01 00:00:01 UTC  2028-01-09 03:14:07 UTC

2.空间占用

DATETIME:在mysql5.6.4之前占8个字节,之后的版本,占5个字节(小数秒+3个字节)。
TIMESTAMP:占4个字节(小数秒+3个字节)。

3.时区属性/时区敏感性

DATETIME:不做任何时区的转换,也不检测时区,与时区无关。
TIMESTAMP:存储时 是从(当前时间)转换成UTC时间,查询时
会将UTC时间转换为数据库当前时区的时间显示,与时区有关。

4.默认值

DATETIME:不会自动存储当前时间,会直接存入null值,
(mysql5.6+之后,DATETIME也支持类似的自动存储时间功能,但需显式配置)。
TIMESTAMP:会自动存储当前时间(now())。