结论
timestamp 和 datetime 都属于日期和时间类型。尽量使用timestamp,空间效率高于datetime。
分析
首先,一个完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction]。它分为date部分和time部分。([.fraction] 小数部分)
两者的不同点:
timestamp | datetime |
---|---|
4字节 | 8字节 |
默认值为当前时间 | 默认值为null |
update语句时,会更新为当前时间 。把插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其转换为客户端当前时区进行返回 | 查询时是原样输出 |
能存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’ | 能存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’ |
TIMESTAMP和DATETIME除了存储范围和存储方式不一样,没有太大区别。当然,对于跨时区的业务,TIMESTAMP更为合适。
在MySQL 5.6.5版本之前,Automatic Initialization and Updating只适用于TIMESTAMP,而且一张表中,最多允许一个TIMESTAMP字段采用该特性。
从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量。