MySQL如何选择Datetime与Timestamp存储时间
核心区别
| 特性 | DATETIME | TIMESTAMP |
|---|---|---|
| 存储空间 | 8 字节 | 4 字节 |
| 时间范围 | 1000-01-01 ~ 9999-12-31 | 1970-01-01 ~ 2038-01-19 |
| 时区处理 | 存储原始值,不转换 | 存储为 UTC,读取时按会话时区转换 |
| 默认值 | 可设固定值 | 支持 CURRENT_TIMESTAMP 自动更新 |
| 自动更新 | 需手动/触发器 | 支持 ON UPDATE CURRENT_TIMESTAMP |
选择建议
✅ 选择 DATETIME 当:
- 需要存储历史日期(如出生日期、历史事件)
- 时间范围可能超出 2038 年
- 需要固定不变的时间记录(如订单创建时间,不因时区改变)
- 应用层已统一处理时区,不需要数据库介入
CREATE TABLE events (
event_time DATETIME NOT NULL DEFAULT '2024-01-01 00:00:00',
birthday DATETIME NOT NULL -- 出生日期,固定不变
);✅ 选择 TIMESTAMP 当:
- 需要自动记录创建/更新时间
- 应用面向全球用户,需要时区自适应
- 存储空间敏感(节省 50%)
- 时间范围在 1970-2038 之间
CREATE TABLE users (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);关键注意事项
1. TIMESTAMP 的 2038 年问题
2038-01-19 后 32 位 TIMESTAMP 会溢出。MySQL 8.0+ 已支持 64 位,但旧系统需警惕。
2. 时区陷阱
-- 会话时区改变,TIMESTAMP 显示值会变 SET time_zone = '+8:00'; SELECT ts FROM table; -- 显示北京时间 SET time_zone = '+0:00'; SELECT ts FROM table; -- 显示 UTC 时间(数值变了!)
DATETIME 不受此影响,始终显示存储时的原始值。
3. 混合使用策略(推荐)
CREATE TABLE orders (
-- 面向用户的本地时间,固定不变
order_time DATETIME NOT NULL,
-- 内部审计/日志,带时区信息
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);总结
| 场景 | 推荐类型 |
|---|---|
| 出生日期、历史日期、未来远期日期 | DATETIME |
| 记录创建/修改时间、全球化应用 | TIMESTAMP |
| 两者都需要 | 混合使用 |
一句话原则:需要"人类看到的固定时间"用 DATETIME;需要"系统记录的瞬时时刻"用 TIMESTAMP。
到此这篇关于MySQL如何选择Datetime与Timestamp存储时间的文章就介绍到这了,更多相关MySQL选择Datetime与Timestamp存储时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mysql 报Row size too large 65535 的原因及解决方法
这篇文章主要介绍了Mysql 报Row size too large 65535 的原因及解决方法 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-06-06
windows 10 下安装mysql 5.7.17的简单笔记
之前一直在Linux下用MySQL,安装也很简单,今天试一下windows下安装,发现有很多坑,今天小编通过本教程给大家记录下,一起看看吧2016-12-12
Mysql连接无效(invalid connection)问题及解决
这篇文章主要介绍了Mysql连接无效(invalid connection)问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-02-02
深入解析MySQL中的Redo Log、Undo Log和Binlog
本文详细介绍了MySQL中的RedoLog、UndoLog和Binlog的背景、业务场景、功能、底层实现原理以及使用措施,通过Java代码示例展示了如何与这些日志进行交互,进一步深化了对MySQL日志系统的理解,理解并合理使用这些日志,可以有效地提升数据库的性能和可靠性2024-10-10


最新评论