Доступные версии документации

Преобразование из одной кодировки в другую

Функция

Преобразование символьной (байтовой) строки в соответствие с заданной кодовой страницей.

Спецификация
 
<выходная кодировка>::=
<входная кодировка>::=
Синтаксические правила
  1. Тип данных <значимого выражения> <строки> должен быть CHAR, VARCHAR, NCHAR, NVARCHAR, BYTE, VARBYTE.

  2. <Выходная кодировка> и <входная кодировка> – символьные литералы, задающие имена кодовых страниц. Не допускается использование параметров, выражений и имен столбцов.

  3. Если <входная кодировка> не задана, используется значение по умолчанию: текущая кодировка <строки> (обычно совпадает с кодировкой канала) для значений строковых типов и кодировка системного словаря – для значений байтовых типов.

  4. Если <выходная кодировка> и <входная кодировка> не заданы, то перекодировка выполняется из кодировки системного словаря СУБД в кодировку канала.

    create or replace table "ZZZТаблица с большим именемXXX" (i int, c char(10));
    create or replace public synonym s_tab_2 for "ZZZТаблица с большим именемXXX";
    insert into "ZZZТаблица с большим именемXXX" values (1,'DEFAULT');
    select * from "ZZZТаблица с большим именемXXX";
    select * from s_tab_2;
    
    Если теперь в командном интерфейсе выполнить команду
    show S_TAB_2
    то имя синонима будет показано как
    PUBLIC.SYNONIM FOR "SYSTEM"." ZZZ???????? ? ??????? ??????XXX"
    
    Чтобы получить корректное имя синонима, можно использовать функцию CONVERT:
    select convert(getraw($$$S14,30,66))
      from LINTER_SYSTEM_USER.$$$SYSRL
     where $$$S13 like 'S_TAB_2'
       and $$$S12 = -1;
    |ZZZТаблица с большим именемXXX|

  5. Доступны все кодировки, включенные в системную таблицу $$$CHARSET и дополнительно Unicode-кодировки с именами UTF-8 и UCS2.

  6. Аргумент <строка> может быть задан <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select convert(? (char(20)), 'CP866', 'CP1251');
    яЁштхЄ
    |привет              |
Общие правила
  1. При посылке данных клиентскому приложению перекодированная строка автоматически преобразуется в кодировку клиентского приложения, поэтому запрос, извлекающий результат работы функции CONVERT, возвращает значения, перекодированные в кодировку клиентского приложения.

    select convert('яЁштхЄ', 'CP1251', 'CP1251'),
    convert('привет', 'CP1251', 'CP866'),
    convert('&#9576;&#9573;&#9556;&#9579;&#9532;&#9560;','CP1251','KOI8-R'),
    convert(cast Hex('3F0440043804320435044204') as nchar,'CP1251','UCS2'),
    convert(Hex('EFF0E8E2E5F2'),'CP1251','CP1251');
    
    |привет|привет|привет|привет|привет|
  2. Если требуется получить строку в кодировке, отличной от кодировки клиента, следует воспользоваться приведением к байтовому типу:

    select cast convert('привет', 'CP866', 'CP866') as byte,'*',
    cast convert('привет', 'CP1251', 'CP866') as byte,'*',
    cast convert('привет', 'KOI8-R', 'CP866') as byte,'*',
    cast convert('привет', 'UCS2', 'CP866') as byte,'*';
    
    | AF E0 A8 A2 A5 E2|*| EF F0 E8 E2 E5 F2|*| D0 D2 C9 D7 C5 D4|*| 3F 04 40 04 38 04 32 04 35 04 42 04|*|

    Т.е. несмотря на то, что все извлекаемые значения имеют одно и то же строковое представление, бинарное представление у них разное.

Возвращаемое значение
  1. Если <выходная кодировка> не является Unicode-кодировкой, функция возвращает строку типа VARCHAR.

  2. Если <выходная кодировка> является Unicode-кодировкой, функция возвращает строку типа NVARCHAR.

Примеры

Примечание

Примеры выполнены с помощью утилиты inl в среде ОС Windows с кодировкой клиента CP866.

Структура-описатель значения <строки> содержит информацию о кодировке.

  1. select convert('яЁштхЄ', 'CP1251', 'CP1251'),
           convert('привет', 'CP1251', 'CP866'),
           convert('&#9576;&#9573;&#9556;&#9579;&#9532;&#9560;', 'CP1251', 'KOI8-R'),
           convert(cast Hex('3F0440043804320435044204') as nchar, 'CP1251', 'UCS2'),
           convert(Hex('EFF0E8E2E5F2'), 'CP1251', 'CP1251');
    
    |привет|привет|&#9576;&#9573;&#9556;&#9579;&#9532;&#9560;|привет|привет|
  2. select convert('a'||'b', 'CP1251', 'UCS2');
    |?|
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter