Skip to content

String right truncation error when preparing a query with a LIKE predicate without wildcards with UTF8 encoding and connection charset WIN1251. #8359

@sim1984

Description

@sim1984

WI-V5.0.2.1582 Firebird 5.0 4a67617

Create database

chcp 1251
SET NAMES WIN1251;

CREATE DATABASE 'inet4://localhost:3055/test'
USER "SYSDBA" PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET UTF8;

RECREATE TABLE T (
  ID BIGINT NOT NULL,
  NAME_UTF8 VARCHAR(50),
  NAME_WIN1251 VARCHAR(50) CHARACTER SET WIN1251,
  PRIMARY KEY (ID)
);


INSERT INTO T(ID, NAME_UTF8, NAME_WIN1251) VALUES (1, 'abc', 'abc');
INSERT INTO T(ID, NAME_UTF8, NAME_WIN1251) VALUES (2, 'Ават', 'Ават');

COMMIT;

Query:

SET NAMES WIN1251;
CONNECT 'inet4://localhost:3055/test'
USER "SYSDBA" PASSWORD 'masterkey';

SELECT COUNT(*)
FROM T
WHERE NAME_WIN1251 LIKE 'Ават';

                COUNT
=====================
                    1

SELECT COUNT(*)
FROM T
WHERE NAME_UTF8 LIKE 'Ават';

Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation
-expected length 0, actual 1

-- Why??? But

SELECT COUNT(*)
FROM T
WHERE NAME_UTF8 LIKE 'Ава_';

                COUNT
=====================
                    1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions