Перейти к содержимому
Последнее обновление

DECODE

SinceVersion dev

Описание​

Преобразует значение VARBINARY в строку с использованием указанной кодировки. Имена кодировок нечувствительны к регистру. Поддерживаются кодировки US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE и UTF-16.

Синтаксис​

DECODE(<binary>, <charset>)

Параметры​

ПараметрОписание
<binary>Двоичное значение для декодирования. Тип: VARBINARY.
<charset>Строковый литерал с именем кодировки входных байтов или NULL. Поддерживаемые значения: US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE и UTF-16. Использование столбца или другого выражения не допускается.

Возвращаемое значение​

Возвращает значение типа STRING, содержащее декодированный текст.

  • Если <charset> равен NULL или если <binary> равен NULL, а <charset> содержит допустимое значение, функция возвращает NULL.
  • Если <binary> пуст, функция возвращает пустую строку.
  • Для UTF-16 функция распознаёт BOM с порядком байтов big-endian (FE FF) и little-endian (FF FE) и удаляет BOM из результата. При отсутствии BOM входные данные декодируются с порядком байтов big-endian. UTF-16BE и UTF-16LE всегда используют явно заданный порядок байтов.
  • Если <charset> не поддерживается, функция возвращает ошибку, даже когда <binary> равен NULL. Если <binary> содержит некорректные данные для указанной кодировки, функция также возвращает ошибку.

Пример​

Декодирование байтов UTF-8

SELECT DECODE(CAST(UNHEX('E4B8AD') AS VARBINARY), 'UTF-8') AS decoded_text;
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+

Декодирование UTF-16 с порядком байтов little-endian и BOM

Имя кодировки в нижнем регистре также демонстрирует сопоставление без учёта регистра.

SELECT DECODE(CAST(UNHEX('FFFE2D4E') AS VARBINARY), 'utf-16') AS decoded_text;
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+

NULL и пустые входные данные

SELECT
DECODE(CAST(NULL AS VARBINARY), 'UTF-8') IS NULL AS null_result,
DECODE(CAST(UNHEX('') AS VARBINARY), 'UTF-16') = '' AS empty_result;
+-------------+--------------+
| null_result | empty_result |
+-------------+--------------+
| 1 | 1 |
+-------------+--------------+