关于jaybird:指定firebird连接方言,而不是数据库方言

Specify firebird connection dialect, not database dialect

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

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

我尝试使用以下内容,但它根本不起作用。

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

当我这样做时,它完全改变了方言,使方言3中断了Delphi应用程序。

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

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

更新

问题在于Firebird 3.0似乎发生了变化。在方言1下的2.5数据库中,我们存储了将参数声明为日期的存储过程。在Firebird 3.0中,方言1下,这些存储过程引发错误,指出

Database SQL dialect 1 does not support reference to DATE datatype

当我们切换到Dialect 3时,所有东西都可以工作-但是我们的Delphi应用程序中断了,因为其中许多应用程序都具有直接查询功能,它选择了Firebird 3.0现在将其视为TIMESTAMP的日期类型列。因此,例如现在我们不再获得2018-06-25的信息,而是获得2018-06-25 23:59:59。

如果可以通过某种方式进行设置,以便我们的Delphi应用程序可以作为方言1进行通信,还可以使ColdFusion数据源作为方言3进行通信,那将是理想的选择。

那有可能吗?


要回答标题所隐含的问题(不解决问题正文的具体问题):您可以使用连接属性dialect(别名为sqlDialectsql_dialect)指定连接方言值1(传统方言1),2(桥梁方言)和3(当前方言)。从技术上讲,0(基于数据库方言的自动选择)也可以工作,但是在某些情况下,即使数据库是方言1,也无论如何都会使用方言3。默认值为方言3。

以上内容适用于Jaybird 3.0.x,使用Jaybird 2.2.x及更早版本的方言选择将应用指定的方言和方言3的组合,因此应视为已损坏。