我有一个使用方言1的Firebird数据库。一些旧的德尔福应用程序必须使用方言 1 来使用它,否则某些查询将失败。问题是,我正在使用 ColdFusion 与我们的 Web 应用程序的数据库进行通信,它需要方言 3。
有什么方法可以在客户端连接级别设置方言吗? 这样我的 ColdFusion 数据源就可以使用 Dialect 3,而旧的 Delphi 应用程序仍然可以使用 Dialect 1?
我尝试使用以下方法,但它根本不起作用。
jdbc:firebirdsql:localhost/3050:C:fbdbmaster25.fdb?sql_dialect=3
当我这样做时,它完全将方言更改为方言 3,这破坏了德尔福应用程序。
jdbc:firebirdsql:localhost/3050:C:fbdbmaster25.fdb?set_sql_dialect=3
有什么想法吗?我正在使用 Jaybird JDBC 驱动程序从 ColdFusion 进行连接。
更新
问题是Firebird 3.0看起来情况发生了变化。 在方言 1 下的 2.5 数据库中,我们有将参数声明为 date 的存储过程。 在方言 1 下的 Firebird 3.0 中,这些存储过程会引发错误,指出
数据库 SQL 方言 1 不支持引用 DATE 数据类型
当我们切换到方言 3 时,一切正常 - 但随后我们的 Delphi 应用程序中断,因为其中许多应用程序都有直接查询,它选择日期类型列,Firebird 3.0 现在将其视为时间戳。 因此,我们现在得到的不是 2018-06-25,而是 2018-06-25 23:59:59。
如果有一些方法可以让我进行设置,以便我们的 Delphi 应用程序可以作为方言 1 进行通信,同时也允许 ColdFusion 数据源作为方言 3 进行通信,那将是理想的。
这可能吗?
要回答标题所隐含的问题(不解决问题正文的细节(:您可以使用连接属性dialect
(别名sqlDialect
和sql_dialect
(指定连接方言,该属性采用值 1(传统方言 1(、2(桥接方言(和 3(当前方言(。从技术上讲,0(基于数据库方言自动选择(也可以工作,但在某些情况下,即使数据库是方言 1,这也会导致方言 3 被使用。默认值为方言 3。
以上适用于 Jaybird 3.0.x,使用 Jaybird 2.2.x 及更早版本的方言选择将应用指定方言和方言 3 的组合,因此应视为已损坏。