Snowflake数据类型何时改用本地时区而非UTC?JDBC驱动版本变更咨询
Snowflake JDBC驱动时区显示变更问题解答
变更起始版本
该时区处理逻辑的变更从snowflake-jdbc 3.12.18版本开始,并非你提到的3.13.20。
变更原因
驱动团队调整了时间类型的客户端解析逻辑:
- 3.12.17及更早版本默认以UTC时区返回TIME、TIMESTAMP_NTZ、TIMESTAMP_TZ类型数据
- 3.12.18及之后版本默认使用JVM的本地时区转换并返回这些时间类型的值,这就是你看到时区偏移和时间数值变化的原因
- TIMESTAMP_TZ的异常差异是因为该类型本身带时区信息,新版本驱动会将存储的UTC时间转换为本地时区时间返回,而旧版本直接返回带UTC偏移的原始值
查看相关说明的方式
你可以在Snowflake官方JDBC驱动的发行说明中找到对应内容,重点查看3.12.18版本的更新条目,里面明确标注了时间类型时区处理的变更。另外,Snowflake的JDBC驱动文档中也有关于时区配置的详细说明,包括如何通过连接参数指定时区。
恢复旧行为的方法
如果需要回到之前UTC返回的逻辑,可在JDBC连接URL中添加参数:
jdbc:snowflake://<account>.snowflakecomputing.com/?TIMEZONE=UTC
也可以通过设置连接属性timezone=UTC,强制驱动使用UTC时区处理时间类型。
你的示例数据对比:
TIME TIMESTAMP_NTZ TIMESTAMP_TZ 3.12.17 22:46:42.000 +0000 2021-01-16 13:46:42.000 2021-01-16 22:46:42.123 +0000 3.12.20 22:46:42.000 +0100 2021-01-16 14:46:42.000 2021-01-16 15:46:42.000 +0100
内容的提问来源于stack exchange,提问作者Jan Jelínek
相关产品推荐
相关产品推荐

