datatime和timestamp之间除了存储范围和存储方式不同外,没有太大的区别。
-
存储范围:
timestamp存储范围小,‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。(因为mysql的timestamp类型,存储是一个整型int数据,由于int是有大小范围的,最多存约21亿数据,因此timestamp存储的数据被限制在1970~2038年之内。)
datetime存储范围没有限制,‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。 -
存储方式:
datetime不做任何改变,原样输入和输出。
timestamp把客户端插入的时间按照当前的时区转化为UTC(世界标准时间)进行存储。查询是会按照客户端的时区进行转化然后返回。
timestamp海量并发时,存在性能抖动问题,且timestamp存在时区转换问题性能不如datetime(虽然通过timestamp可以自动转换时区,代价是当mysql参数time_zone=system时每次都会尝试获取一个全局锁,在高并发的环境下无疑是致命的,可能会导致线程上下文频繁切换,cpu使用率暴涨,系统响应变慢甚至假死)。
还有一个区别就是如果存进去的是NULL,timestamp会自动储存当前时间,而 datetime会储存 NULL。 -
字节比较:
datetime占8字节
timestamp占4字节
总结:如果不存在时区转换的情况下,建议使用datetime