我有一个使用方言1的Firebird数据库。某些旧的Delphi应用程序必须使用方言1进行存储,否则某些查询将失败。问题是,我正在使用ColdFusion与Web应用程序的数据库进行通信,并且它需要方言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中,这些存储过程抛出错误,指出
数据库SQL方言1不支持对DATE数据类型的引用
当我们切换到Dialect 3时,所有东西都可以工作-但后来我们的Delphi应用程序中断了,因为其中许多应用程序都有直接查询,它选择了Firebird 3.0现在视为TIMESTAMP的日期类型列。因此,例如,我们现在得到的是2018-06-25 23:59:59,而不是回到2018-06-25。
如果可以通过某种方式进行设置,以使我们的Delphi应用程序可以以方言1进行通信,那么还可以使ColdFusion数据源以方言3进行通信,那将是理想的选择。
那有可能吗?
答案 0 :(得分:1)
要回答标题所隐含的问题(不解决问题正文的具体问题):您可以使用连接属性dialect
(别名为sqlDialect
和{{1 }}),其值分别为1(传统方言1),2(桥接方言)和3(当前方言)。从技术上讲,0(基于数据库方言的自动选择)也可以工作,但是在某些情况下,即使数据库是方言1,也无论如何都会使用方言3。
以上内容适用于Jaybird 3.0.x,使用Jaybird 2.2.x及更早版本的方言选择将应用指定的方言和方言3的组合,因此应视为已损坏。