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

H2数据库Oracle模式下Windows系统TO_TIMESTAMP函数失效排查

问题原因与解决方案

问题原因

  • H2数据库在Oracle兼容模式下,解析TO_TIMESTAMP的MON格式时,会读取当前系统的区域设置获取月份缩写规则:Windows英文区域默认9月缩写是Sept,而Ubuntu等Linux系统默认是Sep,这导致跨系统解析不一致
  • 时隔一年出现问题,核心是H2版本更新:旧版H2对月份缩写匹配更宽松,新版严格遵循系统区域规则,原本兼容的SEP在Windows下无法匹配系统默认的Sept
  • Oracle原生TO_TIMESTAMP对月份缩写的大小写、长度不敏感,但H2的Oracle兼容模式未完全实现该特性,才出现这种跨系统冲突

解决方案

方案1:统一H2的区域设置

修改JDBC连接URL,强制指定H2使用固定区域,消除系统差异,推荐用en_US(9月缩写为Sep,和Linux默认一致):

jdbc:h2:mem:dev;MODE=Oracle;LOCALE=en_US

原脚本的SEP格式可以在Windows和Ubuntu下正常解析

方案2:替换为数字月份

彻底规避区域依赖,把脚本中的月份缩写改成数字,同时调整格式串:
将原SQL语句:

TO_TIMESTAMP('27-SEP-21 10.00.00.000000000 PM', 'DD-MON-RR HH.MI.SSXFF AM')

改为:

TO_TIMESTAMP('27-09-21 10.00.00.000000000 PM', 'DD-MM-RR HH.MI.SSXFF AM')

方案3:修改Windows本地区域设置(仅本地开发用)

如果只适配个人Windows环境,可以修改系统的月份缩写:

  • 打开「控制面板」→「区域」→「其他设置」→「日期」
  • 找到9月的缩写栏,改为Sep
  • 此方案不适合团队协作,仅作临时本地修复

内容的提问来源于stack exchange,提问作者Efka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:20:02