Py学习  »  DATABASE

MySQL 中 DATETIME 和 TIMESTAMP 有什么区别?

程序员鱼皮 • 1 年前 • 402 次点击  

分享一道经典面试题~

此答案节选自鸭鸭最近弄的面试鸭小程序,更多大厂常问面试题,可以点击下面的小程序进行阅读哈!

盘点不同点

虽然它们都是时间字段类型,但是在存储格式、范围、时区处理和默认值等方面有所不同!

存储格式不同

DATETIME 存储的是具体的日期和时间,格式为 YYYY-MM-DD HH:MM:SS。它不依赖于时区信息,存储的是原始时间数据

TIMESTAMP 存储的是自 1970-01-01 00:00:01 UTC 以来的秒数,格式为 YYYY-MM-DD HH:MM:SS。它依赖于时区信息,存储的是 UTC 时间

时间范围不同

DATETIME 可以表示从 1000-01-01 00:00:00 到 9999-12-31 23:59:59 的时间范围。

TIMESTAMP 可以表示从 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC 的时间范围(32 位整数表示的限制)。

到 2038 年后就存不下咯。

时区处理不同

DATETIME 不考虑时区,它存储的是输入的日期和时间值,不进行任何时区转换。

TIMESTAMP 考虑时区,它存储的是 UTC 时间,插入和检索时会根据当前时区进行转换。这意味着在不同的时区中,TIMESTAMP 类型的数据会自动调整以显示本地时间。

默认值和自动更新不同

在 MySQL 5.6 及更早版本中,DATETIME 列不能有自动更新的默认值。

在 MySQL 5.6 及以后版本中,可以使用 DEFAULT 和 ON UPDATE 子句来指定自动初始化和更新行为,但不像 TIMESTAMP 那么直观。

在 MySQL 5.6 及更高版本中,TIMESTAMP 列可以有默认的当前时间戳 CURRENT_TIMESTAMP,并且可以使用 ON UPDATE CURRENT_TIMESTAMP 使其在行更新时自动更新为当前时间戳。

这使得 TIMESTAMP 非常适合记录行的创建和修改时间。

最后

最后再推荐下鸭鸭目前努力在做面试小程序神器,已经有近 1500 道面试题目啦。

欢迎大家体验!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!

我是鸭鸭,我们下期见~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172182
 
402 次点击