绑定参数不适用于 Firebird 2.0。有解决方法吗?

Bind parameter doesn't work with like in Firebird 2.0. Is there a workaround?

如果我使用带有 like 的绑定参数,它会限制参数的长度。

例如:

select * from rdb$database where :x like '%N';

如果 x 参数长于 2,我会得到一个字符串截断异常。我正在使用火鸟 2.0。有没有办法解决它或绑定参数不适用于 like?

在 Firebird 中,绑定参数被限制为与它们所比较的字段、列或值相同的类型和长度。在这种情况下,您正在与两个字符的文字进行比较,Firebird 将其视为 CHAR(2),因此绑定参数也是 CHAR(2)。这不仅适用于 like,还适用于所有比较操作。

这意味着您不能为参数使用超过两个字符的值。我知道有两种解决方法:

  • 投值,例如:WHERE ? LIKE CAST('%N' AS VARCHAR(256))
  • 转换参数,例如:WHERE CAST(? AS VARCHAR(256)) LIKE '%N'