Skip to content

PSQL functions do not convert the output BLOB to the connection character set. #7604

@sim1984

Description

@sim1984

Windows 10. Firerbird 5.0.0.149.
Same result in Firebird 4.0.2.

C:\Firebird\5.0>chcp 1251
Текущая кодовая страница: 1251

C:\Firebird\5.0>isql -ch win1251
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database 'inet4://localhost:3055/D:\fbdata\5.0\test.fdb' user SYSDBA password 'masterkey' default character
set utf8;
SQL> exit;

C:\Firebird\5.0>isql -ch win1251
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'inet4://localhost:3055/D:\fbdata\5.0\test.fdb' user SYSDBA password 'masterkey';
Database: 'inet4://localhost:3055/D:\fbdata\5.0\test.fdb', User: SYSDBA
SQL> SET TERM ^;
SQL>
SQL> CREATE OR ALTER FUNCTION SP_TEST_FUNC
CON> RETURNS BLOB SUB_TYPE TEXT CHARACTER SET UTF8
CON> AS
CON> DECLARE RUNTOTAL BLOB SUB_TYPE TEXT;
CON> BEGIN
CON>   RUNTOTAL = 'мама мыла раму';
CON>
CON>   RETURN RUNTOTAL;
CON> END^
SQL>
SQL> CREATE OR ALTER PROCEDURE SP_TEST_PROC
CON> RETURNS (
CON>     RUNTOTAL BLOB SUB_TYPE TEXT CHARACTER SET UTF8)
CON> AS
CON> BEGIN
CON>   RUNTOTAL = 'мама мыла раму';
CON>   SUSPEND;
CON> END^
SQL>
SQL> SET TERM ^;
SQL> SET SQLDA_DISPLAY ON;
SQL> SELECT RUNTOTAL
CON> FROM SP_TEST_PROC;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 520 BLOB Nullable scale: 0 subtype: 1 len: 8 charset: 52 WIN1251
  :  name: RUNTOTAL  alias: RUNTOTAL
  : table: SP_TEST_PROC  owner: SYSDBA

         RUNTOTAL
=================
              0:5
==============================================================================
RUNTOTAL:
мама мыла раму
==============================================================================

SQL> SELECT SP_TEST_FUNC() AS RUNTOTAL
CON> FROM RDB$DATABASE;

INPUT message field count: 0

OUTPUT message field count: 1
01: sqltype: 520 BLOB Nullable scale: 0 subtype: 1 len: 8 charset: 0 NONE
  :  name: SP_TEST_FUNC  alias: RUNTOTAL
  : table:   owner:

         RUNTOTAL
=================
              0:8
==============================================================================
RUNTOTAL:
мама мыла раму
==============================================================================

Why OUTPUT charset: 0 NONE?

SQL script text

SET TERM ^;

CREATE OR ALTER FUNCTION SP_TEST_FUNC
RETURNS BLOB SUB_TYPE TEXT CHARACTER SET UTF8
AS
DECLARE RUNTOTAL BLOB SUB_TYPE TEXT;
BEGIN
  RUNTOTAL = 'мама мыла раму';

  RETURN RUNTOTAL;
END^

CREATE OR ALTER PROCEDURE SP_TEST_PROC
RETURNS (
    RUNTOTAL BLOB SUB_TYPE TEXT CHARACTER SET UTF8)
AS
BEGIN
  RUNTOTAL = 'мама мыла раму';
  SUSPEND;
END^

SET TERM ^;

SELECT RUNTOTAL
FROM SP_TEST_PROC;

SELECT SP_TEST_FUNC() AS RUNTOTAL
FROM RDB$DATABASE;

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions