最近我从阿里的开发手册里面看到这样一段话,意思是时间格式的字段一般使用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())。