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

ENCODE

SinceVersion dev

Описание​

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

Синтаксис​

ENCODE(<source>, <charset>)

Параметры​

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

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

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

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

Пример​

Кодирование одного и того же символа с использованием UTF-8 и ISO-8859-1

HEX используется для отображения байтов возвращаемого двоичного значения.

SELECT
HEX(ENCODE('é', 'UTF-8')) AS utf8_bytes,
HEX(ENCODE('é', 'ISO-8859-1')) AS latin1_bytes;
+------------+--------------+
| utf8_bytes | latin1_bytes |
+------------+--------------+
| C3A9 | E9 |
+------------+--------------+

Сравнение вариантов UTF-16

SELECT
HEX(ENCODE('中', 'UTF-16BE')) AS big_endian,
HEX(ENCODE('中', 'UTF-16LE')) AS little_endian,
HEX(ENCODE('中', 'UTF-16')) AS with_bom;
+------------+---------------+----------+
| big_endian | little_endian | with_bom |
+------------+---------------+----------+
| 4E2D | 2D4E | FEFF4E2D |
+------------+---------------+----------+

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

SELECT
ENCODE(NULL, 'UTF-8') IS NULL AS null_result,
HEX(ENCODE('', 'UTF-16')) = '' AS empty_result;
+-------------+--------------+
| null_result | empty_result |
+-------------+--------------+
| 1 | 1 |
+-------------+--------------+