在数据库中,Timestamp(时间戳)的存储方式主要取决于数据库类型、精度需求、时区处理策略以及应用场景。下面从常见数据库实现和设计方式两个维度系统说明。
| 类型 | 范围 | 说明 |
|---|---|---|
TIMESTAMP |
1970-01-01 ~ 2038-01-19 | 受时区影响,自动转换 |
DATETIME |
1000-01-01 ~ 9999-12-31 | 不受时区影响 |
BIGINT(Unix时间戳) |
很大 | 手动管理 |
TIMESTAMP
DATETIME
BIGINT
✅ 推荐
TIMESTAMPDATETIMEBIGINT| 类型 | 说明 |
|---|---|
TIMESTAMP |
不带时区 |
TIMESTAMPTZ |
带时区(强烈推荐) |
BIGINT |
Unix 时间戳 |
TIMESTAMPTZ
✅ 推荐
TIMESTAMPTZ| 类型 | 说明 |
|---|---|
DATE |
精确到秒 |
TIMESTAMP |
支持毫秒 |
TIMESTAMP WITH TIME ZONE |
含时区 |
NUMBER |
Unix 时间戳 |
✅ 推荐
TIMESTAMP WITH TIME ZONE| 类型 | 说明 |
|---|---|
DATETIME |
老类型 |
DATETIME2 |
高精度(推荐) |
DATETIMEOFFSET |
含时区 |
BIGINT |
Unix 时间戳 |
✅ 推荐
DATETIMEOFFSETDATETIME2created_at TIMESTAMP
updated_at DATETIME
✅ 优点
❌ 缺点
created_at BIGINT
表示自 1970-01-01 00:00:00 UTC 起的秒或毫秒数。
✅ 优点
❌ 缺点
created_at VARCHAR(30)
示例:
2026-01-15T12:30:00+08:00
✅ 优点
❌ 缺点
数据库统一存 UTC,应用层换算时区
| 层 | 做法 |
|---|---|
| 数据库 | 存 UTC(TIMESTAMP / TIMESTAMPTZ) |
| 应用 | 转为用户时区显示 |
| API | ISO 8601 + Z |
| 精度 | 示例 |
|---|---|
| 秒 | 1700000000 |
| 毫秒 | 1700000000000 |
| 微秒 | 1700000000000000 |
⚠️ 注意:
TIMESTAMP / TIMESTAMPTZBIGINT(UTC 毫秒)如果你愿意,可以告诉我:
我可以直接给你最优表结构 + 示例代码(SQL / Java / Python / Go)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。