分享一道经典面试题~
此答案节选自鸭鸭最近弄的面试鸭小程序,更多大厂常问面试题,可以点击下面的小程序进行阅读哈!
虽然它们都是时间字段类型,但是在存储格式、范围、时区处理和默认值等方面有所不同!
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 道面试题目啦。
欢迎大家体验!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!
我是鸭鸭,我们下期见~