云数据仓库ADB中timestamp 和 datetime 的区别?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在云原生数据仓库 AnalyticDB(ADB)中,TIMESTAMP 和 DATETIME 是两种常用的时间类型,它们在功能、取值范围、时区支持以及使用场景上存在显著差异。以下是两者的详细对比:
TIMESTAMP
'0100-01-01 00:00:00.000' UTC 到 '9999-12-31 23:59:59.999' UTC。DATETIME
'0001-01-01 00:00:00.000' UTC 到 '9999-12-31 23:59:59.999' UTC。重要区别:
- TIMESTAMP 的起始时间是 0100-01-01,而 DATETIME 的起始时间是 0001-01-01。
- DATETIME 支持更早的历史时间,适合需要处理远古日期的场景。
TIMESTAMP
SESSION 设置时区,例如 SET time_zone = '+08:00';。DATETIME
重要提醒:
- 如果业务涉及多时区操作,建议使用 TIMESTAMP,因为它能够自动处理时区转换。
- 如果业务仅需固定时间记录,且不需要时区调整,则可以选择 DATETIME。
TIMESTAMP 和 DATETIME 均占用 8 字节 的存储空间。TIMESTAMP 和 DATETIME 都会对输入的时间值进行合法性校验。ILLEGAL_DATE_CONVERT_TO_NULL_ENABLE=true,当写入不合法的时间值(如 0000-00-00)时,系统会自动将其转换为 NULL。注意:
- MySQL 支持 0000-00-00 这样的非法日期,但 AnalyticDB 不支持,必须确保写入的时间值合法。
TIMESTAMP
DATETIME
TIMESTAMP 和 DATETIME 支持自定义精度(如秒后的小数位数),而 AnalyticDB 仅支持毫秒级精度(小数点后三位)。TIMESTAMP 起始时间为 1970-01-01,而 AnalyticDB 的 TIMESTAMP 起始时间为 0100-01-01。| 特性 | TIMESTAMP | DATETIME |
|---|---|---|
| 取值范围 | '0100-01-01' ~ '9999-12-31' | '0001-01-01' ~ '9999-12-31' |
| 时区支持 | 支持时区转换 | 不支持时区转换 |
| 存储字节数 | 8 字节 | 8 字节 |
| 合法性校验 | 合法性校验,非法值转为 NULL | 合法性校验,非法值转为 NULL |
| 适用场景 | 跨时区、动态时区调整 | 固定时间记录 |
通过以上对比可以看出,TIMESTAMP 更适合需要时区支持的动态场景,而 DATETIME 更适合固定时间记录的静态场景。选择时应根据具体业务需求进行权衡。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。