MySQL中的基础知识,总结记录 DATETIME 与 TIMESTAMP 相同点、不同点及使用选择,记录如下:
相同
- TIMESTAMP 数据类型的显示格式与 DATETIME 相同,均包含日期和时间部分的值:YYYY-MM-DD HH:MM:SS,显示宽度固定在19字符。
- TIMESTAMP 和 DATETIME 列可以自动初始化并更新为当前日期和时间(即当前时间戳)
注:在MySQL 5.6.5版本之前,Automatic Initialization and Updating只适用于TIMESTAMP,而且一张表中,最多允许一个TIMESTAMP字段采用该特性。从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量;
官方文档中有详细的介绍,链接附在最后。
区别
1. 范围
DATETIME数据类型支持的范围是 '1000-01-01 00:00:00'到'9999-12-31 23:59:59';
TIMESTAMP数据类型支持的范围是 '1970-01-01 00:00:01'到'2038-01-19 03:14:07'。
2. 存储
TIMESTAMP
- 4个字节储存(Time stamp value is stored in 4 bytes)
- 值以UTC格式保存( it stores the number of milliseconds)
- 时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
DATETIME
- 8个字节储存(8 bytes storage)
- 实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
- 与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
使用选择
- TIMESTAMP 记录经常变化的更新/创建/发布/日志时间等,并且是近来的时间,够用,可免时区处理;
- DATETIME 记录生日、纪念事件、超出 TIMESTAMP 的时间,记得时区处理;
总结:MySQL中尽量使用DATETIME,而不要使用TIMESTAMP!
参考:
MySQL中的datetime与timestamp区别比较
MySQL中有关TIMESTAMP和DATETIME的总结
MySQL :: MySQL 5.7 Reference Manual :: 11.3.1 The DATE, DATETIME, and TIMESTAMP Types
MySQL :: MySQL 5.7 Reference Manual :: 11.3.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME