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

Если в результате сравнения тип поля меняется на домен (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
28.05.2016, 14:24
    #39245430
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компарер, ошибка с COLLATE
Исправил.
...
Рейтинг: 0 / 0
30.05.2016, 10:58
    #39246010
Tofik Emailovich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компарер, ошибка с COLLATE
Спасибо.
Аналогичная ситуация наблюдается и в IBEscript.exe (в dll возможно тоже).
...
Рейтинг: 0 / 0
30.05.2016, 14:24
    #39246209
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компарер, ошибка с COLLATE
Обновил их тоже.
...
Рейтинг: 0 / 0
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Компарер, ошибка с COLLATE / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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