Преобразование символьной (байтовой) строки в соответствие с заданной кодовой страницей.
::=
::=
::=
::=
Тип данных <значимого выражения>
<строки>
должен быть CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, BYTE
, VARBYTE
.
<Выходная кодировка>
и <входная кодировка>
– символьные литералы, задающие
имена кодовых страниц. Не допускается использование параметров, выражений и имен столбцов.
Если <входная кодировка>
не задана, используется значение по умолчанию: текущая кодировка <строки>
(обычно совпадает с кодировкой
канала) для значений строковых типов и кодировка системного словаря – для значений байтовых типов.
Если <выходная кодировка>
и <входная кодировка>
не заданы, то
перекодировка выполняется из кодировки системного словаря СУБД в кодировку канала.
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|
Доступны все кодировки, включенные в системную таблицу $$$CHARSET и дополнительно Unicode-кодировки с именами UTF-8 и UCS2.
Аргумент <строка>
может быть задан <SQL-параметром>
, который должен содержать спецификацию типа данных параметра.
select convert(? (char(20)), 'CP866', 'CP1251'); яЁштхЄ |привет |
При посылке данных клиентскому приложению перекодированная строка
автоматически преобразуется в кодировку клиентского приложения, поэтому
запрос, извлекающий результат работы функции CONVERT
, возвращает значения,
перекодированные в кодировку клиентского приложения.
select convert('яЁштхЄ', 'CP1251', 'CP1251'), convert('привет', 'CP1251', 'CP866'), convert('╨╥╔╫┼╘','CP1251','KOI8-R'), convert(cast Hex('3F0440043804320435044204') as nchar,'CP1251','UCS2'), convert(Hex('EFF0E8E2E5F2'),'CP1251','CP1251'); |привет|привет|привет|привет|привет|
Если требуется получить строку в кодировке, отличной от кодировки клиента, следует воспользоваться приведением к байтовому типу:
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|*|
Т.е. несмотря на то, что все извлекаемые значения имеют одно и то же строковое представление, бинарное представление у них разное.
Если <выходная кодировка>
не является Unicode-кодировкой, функция возвращает строку типа VARCHAR
.
Если <выходная кодировка>
является Unicode-кодировкой, функция возвращает строку типа NVARCHAR
.
Примеры выполнены с помощью утилиты inl в среде ОС Windows с кодировкой клиента CP866.
Структура-описатель значения <строки> содержит информацию о кодировке.
select convert('яЁштхЄ', 'CP1251', 'CP1251'), convert('привет', 'CP1251', 'CP866'), convert('╨╥╔╫┼╘', 'CP1251', 'KOI8-R'), convert(cast Hex('3F0440043804320435044204') as nchar, 'CP1251', 'UCS2'), convert(Hex('EFF0E8E2E5F2'), 'CP1251', 'CP1251'); |привет|привет|╨╥╔╫┼╘|привет|привет|
select convert('a'||'b', 'CP1251', 'UCS2'); |?|