You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Oracle JDBC的serverTimezone解决ORA-01882时区错误

问题原因

你配置的useTimezone、serverTimezone是MySQL JDBC驱动的专属参数,Oracle JDBC驱动无法识别这两个配置,因此之前的URL参数配置完全不生效。
抛出ORA-01882: timezone region not found的核心原因是:Oracle JDBC驱动初始化连接时,会读取当前运行环境的默认时区,尝试和Oracle数据库内置的时区区域列表做匹配,如果JVM返回的时区ID不在Oracle的内置列表里,就会触发这个报错。

可落地的解决方法

按生效优先级排序,选其中一种即可:

  • 方案1:修改JDBC连接URL,使用Oracle官方支持的时区参数,去掉无效的MySQL专属参数,示例配置:
# 请将IP、端口、服务名替换为你的实际数据库地址
spring.datasource.url=jdbc:oracle:thin:@192.168.1.1:1521:desastg?oracle.jdbc.timezoneAsRegion=false

配置oracle.jdbc.timezoneAsRegion=false后,驱动会使用时区偏移量而非区域名称做匹配,绕过时区区域找不到的问题。

  • 方案2:给应用JVM添加启动参数,强制指定JVM使用Oracle可识别的标准时区ID,配置示例:
# 可根据业务需要选择UTC或者国内常用的Asia/Shanghai
-Duser.timezone=Asia/Shanghai

从日志看你的服务跑在容器环境中,直接把这个参数加到JAVA启动的环境变量里即可,不需要改业务代码和配置。

  • 方案3:修正Hikari连接池的配置层级,你之前的Hikari属性前缀写错导致配置未生效,正确配置如下:
spring.datasource.hikari.data-source-properties.timezoneAsRegion=false
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.properties.hibernate.jdbc.time_zone=UTC

注意:不要在Oracle JDBC的连接URL里保留serverTimezone、useTimezone这类MySQL专属参数,没有任何作用还可能引发参数解析异常。

内容的提问来源于stack exchange,提问作者Aldo Inácio da Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:48:23