在我的项目中,我使用 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 使用 Java 中的 CLDR,来自较新版本 Java 的 CLDR 的较新版本在
en_GB
语言环境中使用 Sept 而不是 Sept。此更改是在 Java 16 中引入的。因此您可以使用某些较旧版本的 Java 或某些其他语言环境(例如没有国家/地区的基本 en
语言环境)。