Последнее обновление
ENCODE
Описание
Преобразует строку в значение 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 |
+-------------+--------------+