仅更改 H2 兼容模式属性

Change H2 compatibility mode attribute only

提问人:osmarcf 提问时间:10/18/2023 最后编辑:osmarcf 更新时间:10/19/2023 访问量:32

问:

我在(默认)REGULAR 兼容模式下使用 H2,但为了使其与我同时使用的某些 DBMS 系统兼容,我只想设置属性(MODE 及其属性)。zeroExLiteralsAreBinaryStrings

有没有办法在不在连接字符串上设置 MODE 的情况下更改它?

我知道将MODE更改为MySQL会设置此属性,但就我而言,由于其他原因,它会影响其他地方和系统中断。

到目前为止,我尝试过:

  • 将兼容模式设置为其他一些枚举; 其他枚举设置其他不需要的标志

  • 让休眠对象达到该属性并相应地设置它; 我无法具体达到该属性

  • 检查 H2 数据库以编程方式更改它; SETTINGS 表仅在 MODE 值上有所不同。没有存储值。zeroExLiteralsAreBinaryStrings

  • 创建一个新的模式/扩展模式; org.h2.engine.Mode 构造函数具有私有访问权限

数据库 H2 兼容 模式

评论


答:

0赞 osmarcf 10/19/2023 #1

我设法使它工作,解开 Connection 对象并达到内部 H2 设置:

// I already had Connection connection
JdbcConnection h2Connection = connection.unwrap(JdbcConnection.class);

h2Connection.getSession().getDynamicSettings().mode.zeroExLiteralsAreBinaryStrings = false;
System.out.println(h2Connection.getSession().getDynamicSettings().mode.zeroExLiteralsAreBinaryStrings);

h2Connection.getSession().getDynamicSettings().mode.zeroExLiteralsAreBinaryStrings = true;
System.out.println(h2Connection.getSession().getDynamicSettings().mode.zeroExLiteralsAreBinaryStrings);