Ние използваме двоична стойност, която се съхранява в таблици като 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 както като набор от символи на базата данни по подразбиране, така и като набор от символи за връзка. Опитът за извикване на нашия 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. И двете се провалят по същия начин.