powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Компарер, ошибка с COLLATE
4 сообщений из 4, страница 1 из 1
Компарер, ошибка с COLLATE
    #39245071
Tofik Emailovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Если в результате сравнения тип поля меняется на домен (CHAR или VARCHAR) и при этом тип CHAR меняется на VARCHAR или наоборот, то происходит «сброс» COLLATE на «нулевой».

Изменения в примере:
В поле F_1 тип CHAR(5) меняется на домен CHAR(5) – все в порядке.
В поле F_2 тип CHAR(5) меняется на домен VARCHAR(5) – «обнуляется» COLLATE.
В поле F_3 тип VARCHAR(5) меняется на домен CHAR(5) – «обнуляется» COLLATE.
В поле F_4 тип VARCHAR(5) меняется на домен VARCHAR(5) – все в порядке.
В поле F_5 домен VARCHAR(5) меняется на домен CHAR(5) – все в порядке.
В поле F_6 домен CHAR(5) меняется на домен VARCHAR(5) – все в порядке.

Пример:
Чарсет БД WIN1257, COLLATE WIN1257_LV:
CREATE DATABASE 'TEST.fdb' USER 'SYSDBA' PASSWORD 'masterkey' DEFAULT CHARACTER SET WIN1257 COLLATION WIN1257_LV

Домены в обеих базах одинаковые:
CREATE DOMAIN D_CH5 AS CHAR(5) CHARACTER SET WIN1257 COLLATE WIN1257_LV;
CREATE DOMAIN D_VARCH5 AS VARCHAR(5) CHARACTER SET WIN1257 COLLATE WIN1257_LV;

Мастер:
CREATE TABLE TABLE_1 (
F_1 D_CH5 /* D_CH5 = CHAR(5) */,
F_2 D_VARCH5 /* D_VARCH5 = VARCHAR(5) */,
F_3 D_CH5 /* D_CH5 = CHAR(5) */,
F_4 D_VARCH5 /* D_VARCH5 = VARCHAR(5) */,
F_5 D_CH5 /* D_CH5 = CHAR(5) */,
F_6 D_VARCH5 /* D_VARCH5 = VARCHAR(5) */
);

Таргет:
CREATE TABLE TABLE_1 (
F_1 CHAR(5),
F_2 CHAR(5),
F_3 VARCHAR(5),
F_4 VARCHAR(5),
F_5 D_VARCH5 /* D_VARCH5 = VARCHAR(5) */,
F_6 D_CH5 /* D_CH5 = CHAR(5) */
);

Результирующий скрипт:
ALTER TABLE TABLE_1 ALTER COLUMN F_1 TYPE D_CH5;

ALTER TABLE TABLE_1 ALTER COLUMN F_2 TYPE D_VARCH5;

UPDATE RDB$RELATION_FIELDS SET RDB$COLLATION_ID = 0
WHERE (RDB$RELATION_NAME = 'TABLE_1') AND (RDB$FIELD_NAME = 'F_2');

COMMIT WORK;

ALTER TABLE TABLE_1 ALTER COLUMN F_3 TYPE D_CH5;

UPDATE RDB$RELATION_FIELDS SET RDB$COLLATION_ID = 0
WHERE (RDB$RELATION_NAME = 'TABLE_1') AND (RDB$FIELD_NAME = 'F_3');

COMMIT WORK;

ALTER TABLE TABLE_1 ALTER COLUMN F_4 TYPE D_VARCH5;

ALTER TABLE TABLE_1 ALTER COLUMN F_5 TYPE D_CH5;

ALTER TABLE TABLE_1 ALTER COLUMN F_6 TYPE D_VARCH5;
...
Рейтинг: 0 / 0
Компарер, ошибка с COLLATE
    #39245430
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил.
...
Рейтинг: 0 / 0
Компарер, ошибка с COLLATE
    #39246010
Tofik Emailovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Аналогичная ситуация наблюдается и в IBEscript.exe (в dll возможно тоже).
...
Рейтинг: 0 / 0
Компарер, ошибка с COLLATE
    #39246209
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил их тоже.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Компарер, ошибка с COLLATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]