H2 在 Windows 上的 TO_TIMESTAMP 开始失败(MODE=Oracle)

问题描述 投票:0回答:1

在我的项目中,我使用 Liquibase 填充数据库以进行集成测试。

数据库 jdbc url:“jdbc:h2:mem:dev;MODE=Oracle”

开发在某个阶段完成了——一切都很好。 一年后当我返回时,我在 Windows 上的集成测试停止使用 liquibase.exception.DatabaseException,其原因是

org.h2.jdbc.JdbcSQLDataException: Function "TO_TIMESTAMP": Invalid date format: 
" Tried to parse one of '[Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec, ]' 
but failed (may be an internal error?). 
Details: \000a    TO_TIMESTAMP('27-SEP-21 10.00.00.000000000 PM', 'DD-MON-RR HH.MI.SSXFF AM')\000a

终端箭头进一步指向月份名称 Sept 和 SEP。

将脚本中的月份从 SEP 更改为 SEPT 后,测试通过。 这显然不符合 Oracle 中的 TO_TIMESTAMP 函数。

还有什么。该问题仅存在于 Windows 上。 在 Ubuntu(我们的 CI)上一切都构建得很好。当我使用 Windows 中的“修复”(SEP->SEPT)进行构建时,测试在某些断言上失败。看起来脚本没有做他们应该做的事情。

您知道出了什么问题以及我该如何解决它吗?

h2
1个回答
0
投票

H2 使用 Java 中的 CLDR,来自较新版本 Java 的 CLDR 的较新版本在

en_GB
语言环境中使用 Sept 而不是 Sept。此更改是在 Java 16 中引入的。因此您可以使用某些较旧版本的 Java 或某些其他语言环境(例如没有国家/地区的基本
en
语言环境)。

© www.soinside.com 2019 - 2024. All rights reserved.