指定 firebird 连接方言,而不是数据库方言

Specify firebird connection dialect, not database dialect

我有一个使用方言 1 的 Firebird 数据库。一些旧的 Delphi 应用程序必须使用方言 1 或某些查询将失败。问题是,我正在使用 ColdFusion 与我们的 Web 应用程序的数据库进行通信,它需要 Dialect 3。

有什么方法可以在客户端连接级别设置方言吗?这样我的 ColdFusion 数据源就可以使用方言 3,而旧的 Delphi 应用程序仍然可以使用方言 1?

我试过使用以下方法,但根本不起作用。

jdbc:firebirdsql:localhost/3050:C:\fbdb\master25.fdb?sql_dialect=3

当我这样做时,它完全将方言更改为方言 3,这破坏了 Delphi 应用程序。

jdbc:firebirdsql:localhost/3050:C:\fbdb\master25.fdb?set_sql_dialect=3

有什么想法吗?我正在使用 Jaybird JDBC 驱动程序从 ColdFusion 进行连接。

更新

问题是 Firebird 3.0 上的情况似乎发生了变化。在方言 1 下的 2.5 数据库中,我们有存储过程,其中参数声明为日期。在方言 1 下的 Firebird 3.0 中,这些存储过程抛出错误

Database SQL dialect 1 does not support reference to DATE datatype

当我们切换到方言 3 时,一切正常 - 但随后我们的 Delphi 应用程序中断,因为它们中的许多有直接查询,它选择日期类型列,Firebird 3.0 现在将其视为 TIMESTAMP。因此,我们现在得到的不是 2018-06-25,而是 2018-06-25 23:59:59.

如果我可以通过某种方式进行设置,使我们的 Delphi 应用程序可以作为方言 1 进行通信,同时还允许 ColdFusion 数据源作为方言 3 进行通信,那就太理想了。

这可能吗?

回答标题暗示的问题(不解决问题 body 的具体细节):您可以使用连接 属性 dialect 指定连接方言(与别名 sqlDialectsql_dialect),取值 1(遗留方言 1)、2(桥梁方言)和 3(当前方言)。技术上 0(auto-select 基于数据库方言)也有效,但在某些情况下,即使数据库是方言 1,这也会导致方言 3 仍然被使用。默认为方言 3。

以上适用于 Jaybird 3。0.x,Jaybird 2 的方言选择。2.x 及更早版本将应用指定方言和方言 3 的组合,因此应被视为损坏。