CREATE CONVERSION
CREATE CONVERSION — определить новую перекодировку
Синтаксис
CREATE [ DEFAULT ] CONVERSION имя
FOR исходная_кодировка TO целевая_кодировка FROM имя_функции
Описание
Команда CREATE CONVERSION
определяет новую перекодировку между двумя наборами
символов.
Перекодировки, помеченные как DEFAULT, могут использоваться для автоматической перекодировки между клиентом и сервером. Для этого необходимо определить две перекодировки — из кодировки A в кодировку B и из кодировки B в кодировку A.
Чтобы создать перекодировку, необходимо иметь право EXECUTE для соответствующей функции и право CREATE в целевой схеме.
Параметры
DEFAULT
Предложение DEFAULT указывает, что эта перекодировка является перекодировкой по умолчанию для заданной исходной кодировки в целевую. В схеме для пары кодировок должна быть только одна перекодировка по умолчанию.
имя
Имя перекодировки (может быть дополнено схемой). Если схема не указана, перекодировка создается в текущей схеме. Имя перекодировки должно быть уникальным в пределах схемы.
исходная_кодировка
Имя исходной кодировки.
целевая_кодировка
Имя целевой кодировки.
имя_функции
Функция, используемая для выполнения перекодировки. Имя функции может быть дополнено схемой. Если это не так, функции разыскивается в пути поиска.
Функция должна иметь следующую сигнатуру:
conv_proc(
integer, -- идентификатор исходной кодировки
integer, -- идентификатор целевой кодировки
cstring, -- исходная строка (строка C, завершающаяся NULL)
internal, -- целевая строка (заполняется строкой C, завершающейся NULL)
integer -- длина исходной строки
boolean -- если true, не выдавать ошибку при сбое перекодировки
) RETURNS integer;
Возвращаемое значение представляет собой количество исходных байтов, которые были успешно преобразованы. Если последний аргумент равен false, функция должна выдать ошибку при недопустимом входном значении. Кроме того, возвращаемое значение всегда равно длине исходной строки.
Примечания
Как исходная, так и целевая кодировки должны отличаться от SQL_ASCII, поскольку поведение сервера в случаях использования «кодировки» SQL_ASCII является аппаратным.
Для удаления пользовательских перекодировок используйте команду DROP CONVERSION
.
Права доступа, необходимые для создания перекодировки, могут быть изменены в будущих версиях.
Примеры
Создание перекодировки из кодировки UTF8 в LATIN1 с использованием функции myfunc:
CREATE CONVERSION myconv FOR 'UTF8' TO 'LATIN1' FROM myfunc;
Совместимость
Команда CREATE CONVERSION
является расширением QHB. В стандарте
SQL нет команды CREATE CONVERSION
, но есть команда CREATE TRANSLATION
,
которая очень похожа по назначению и синтаксису.