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 を使用するアプリケーションでテストしました。どちらも同じように失敗します。