我们使用存储在表中的二进制值作为 CHAR(18) CHARACTER SET OCTETS。
在 Firebird 2.0.4 中,我们使用 ASCII 作为默认数据库字符集和连接字符集。我们有一个可以生成所需数据的 UDF,其定义为:
DECLARE EXTERNAL FUNCTION CREATEBINARY
RETURNS CSTRING(76)
ENTRY_POINT 'CREATEBINARY'
MODULE_NAME 'CustomUDF';
检索值
SELECT CREATEBINARY() FROM RDB$DATABASE
返回期望值。
在 Firebird 2.5.2 中,我们使用 UTF8 作为默认数据库字符集和连接字符集。尝试使用上述 select 语句调用我们的 UDF 现在会导致错误:
Context: Statement::Fetch
Message: idx_dsql_fetch failed.
SQL Message: -104
Invalid Token
Engine Code: 335544849
Engine Message:
Malformed string
我尝试修改函数声明以将结果的字符集指定为 OCTETS 和 NONE:
DECLARE EXTERNAL FUNCTION CREATEBINARY
RETURNS CSTRING(76) CHARACTER SET OCTETS
ENTRY_POINT 'CREATEBINARY'
MODULE_NAME 'CustomUDF';
但我仍然收到相同的错误结果。
我已经在 FlameRobin 0.9.3.1870 和我们使用 Delphi XE2 Update 4 和 IBObjects 4.9 Release 14 的应用程序中对此进行了测试。两者都以相同的方式失败。