云数据仓库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 版。