上一篇
本文目录导读:
📅 MySQL时间类型全解析 | 2025年8月最新指南 🕒
MySQL提供多种时间类型,满足不同场景需求:
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),依赖时区自动转换,适合跨时区应用(如用户登录时间)。DATE
📅'1000-01-01'
到 '9999-12-31'
),适合生日、节日等场景。TIME
⏱️'-838:59:59'
到 '838:59:59'
),支持负数,适合记录时长(如通话时间)。YEAR
🎉1901
到 2155
),适合统计年度数据。类型 | 存储空间 | 适用场景 |
---|---|---|
TIMESTAMP |
4字节 | 跨时区、自动时区转换 |
DATETIME |
5字节 | 绝对时间、无时区依赖 |
DATE |
3字节 | 纯日期(如生日) |
TIME |
3字节 | 时长(如视频时长) |
YEAR |
1字节 | 年度统计(超省空间!) |
TIMESTAMP
🌏:存储的是UTC时间戳,插入/查询时会自动转换为当前会话时区的时间(通过 SET time_zone = 'Asia/Shanghai'
设置)。DATETIME
🏠:存储的是本地时间,不随会话时区改变,适合固定时区的场景(如内部系统日志)。示例:
-- 设置时区为上海 SET time_zone = '+8:00'; -- 插入TIMESTAMP(自动转换为上海时间存储) INSERT INTO events (event_time) VALUES (NOW()); -- 插入DATETIME(直接存储本地时间) INSERT INTO logs (log_time) VALUES (NOW());
CREATE TABLE users ( created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 自动记录创建时间 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 自动更新 birthday DATE -- 存储生日 );
CREATE TABLE events ( start_time BIGINT COMMENT '时间戳(秒)', end_time BIGINT COMMENT '时间戳(毫秒)' ); -- 插入示例(PHP) INSERT INTO events (start_time) VALUES (UNIX_TIMESTAMP());
CREATE TABLE logs ( log_time VARCHAR(20) -- 占用空间大,无法直接计算时间差 );
DATETIME
精度提升:支持到微秒(DATETIME(6)
),'2025-08-27 15:30:45.123456'
。TIMESTAMP
DATETIME
DATE
YEAR
TIME
避坑提示:
⚠️ 避免混合使用TIMESTAMP
和DATETIME
,可能导致时区混乱!
⚠️ 2038年问题:TIMESTAMP
在32位系统上最大支持到2038年,建议升级到64位系统或使用DATETIME
。
🔗 参考来源:MySQL官方文档(2025-08更新)、Percona博客、DB-Engines排名分析。
本文由 业务大全 于2025-08-27发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/746819.html
发表评论