计算 Firebird 3.0 bigint 与 Firebird 2.5 整数

Count in Firebird 3.0 bigint vs Firebird 2.5 integer

在我的系统上,从 Firebird 2.5 迁移到 3.0 后,许多报告和其他函数开始出现问题,指出预期的是整数,而当前的是 LargeInt。我看了一下,发现一些搜索在 3.0 return 中是一个 bigInt 列,而在 2.5 中它是 return 一个整数列。

为了解决我所知道的方法,我将不得不对所有出现错误、经过测试和工作的东西进行强制转换,但这是一个大系统,它会带来很多工作。

有谁知道在 Firebird 中解决这个问题的方法吗?一些配置,还是什么?

没有它的配置; Firebird 3 release notes only say:

The COUNT() aggregator now returns its result as BIGINT instead of INTEGER.

您需要在查询或代码中显式应用强制转换,或者查看您的数据访问库是否可以显式请求整数而不仅仅是动态类型。例如,在 Java 世界中,JDBC API 有一个明确的 getInt,只要该值适合 32 位整数,它就可以用于 BIGINT

我使用 Unidac,解决方案我使用 Map Rules(数据类型映射)。

在任何 delphi 组件中使用 SQL 中的 TYPECAST 就可以了。例如:

select
cast(count(*) as integer) BR
from ...

而不是

select
count(*) BR
from ...