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

FROM_BASE64

Описание​

Функция FROM_BASE64 декодирует строку в кодировке Base64, восстанавливая исходную строку. Она выполняет операцию, обратную TO_BASE64, и соответствует стандарту RFC 4648. Кодировка Base64 обычно используется для передачи двоичных данных в текстовых протоколах, а эта функция позволяет восстановить закодированные данные. Она поддерживает стандартный набор символов Base64 (A-Z, a-z, 0-9, +, /) и символ заполнения (=).

Синтаксис​

FROM_BASE64(<str>)

Параметры​

ПараметрОписание
<str>Строка в кодировке Base64, которую нужно декодировать. Тип: VARCHAR

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

Возвращает значение типа VARCHAR, представляющее исходную строку после декодирования Base64.

Правила декодирования:

  • Принимает стандартный набор символов Base64: A-Z, a-z, 0-9, +, /
  • Поддерживает символ заполнения =
  • Соответствует стандарту RFC 4648
  • Длина входной строки должна быть кратна 4 (за исключением пустой строки)
  • Результат декодирования может содержать непечатаемые символы

Особые случаи:

  • Если входное значение равно NULL, возвращает NULL
  • Если входная строка содержит недопустимые символы Base64 (включая пробельные символы, такие как пробелы и переводы строк), возвращает NULL
  • Если входная строка пустая, возвращает пустую строку
  • Если длина входной строки не кратна 4, возвращает NULL
  • Если заполнение некорректно или формат недопустим, возвращает NULL
Примечание к версии (4.0.8)

В версии 4.0.8 исправлен расчёт размера буфера декодирования для FROM_BASE64 и определено поведение при некорректных входных данных: если длина входной строки не кратна 4, сразу возвращается NULL. Ранее размер буфера составлял половину длины входной строки, чего было недостаточно, поэтому некорректные входные данные могли приводить к записи за пределами буфера. Расчёт размера буфера кодирования для TO_BASE64 исправлен в той же версии.

Примеры​

  1. Базовое декодирование
SELECT FROM_BASE64('MQ=='), FROM_BASE64('QQ==');
+---------------------+---------------------+
| FROM_BASE64('MQ==') | FROM_BASE64('QQ==') |
+---------------------+---------------------+
| 1 | A |
+---------------------+---------------------+
  1. Декодирование нескольких символов
SELECT FROM_BASE64('MjM0'), FROM_BASE64('SGVsbG8=');
+---------------------+-------------------------+
| FROM_BASE64('MjM0') | FROM_BASE64('SGVsbG8=') |
+---------------------+-------------------------+
| 234 | Hello |
+---------------------+-------------------------+
  1. Обработка значения NULL
SELECT FROM_BASE64(NULL);
+-------------------+
| FROM_BASE64(NULL) |
+-------------------+
| NULL |
+-------------------+
  1. Обработка пустой строки
SELECT FROM_BASE64('');
+-----------------+
| FROM_BASE64('') |
+-----------------+
| |
+-----------------+
  1. Обработка недопустимых символов
SELECT FROM_BASE64('!!!'), FROM_BASE64('ABC@DEF');
+--------------------+------------------------+
| FROM_BASE64('!!!') | FROM_BASE64('ABC@DEF') |
+--------------------+------------------------+
| NULL | NULL |
+--------------------+------------------------+
  1. Более длинные данные
SELECT FROM_BASE64('SGVsbG8gV29ybGQ='), FROM_BASE64('VGhlIHF1aWNrIGJyb3duIGZveA==');
+---------------------------------+---------------------------------------------+
| FROM_BASE64('SGVsbG8gV29ybGQ=') | FROM_BASE64('VGhlIHF1aWNrIGJyb3duIGZveA==') |
+---------------------------------+---------------------------------------------+
| Hello World | The quick brown fox |
+---------------------------------+---------------------------------------------+
  1. Многобайтовые данные в UTF-8
SELECT FROM_BASE64('4bmt4bmbw6w='), FROM_BASE64('4biN4biNdW1haSBoZWxsbw==');
+-----------------------------+-----------------------------------------+
| FROM_BASE64('4bmt4bmbw6w=') | FROM_BASE64('4biN4biNdW1haSBoZWxsbw==') |
+-----------------------------+-----------------------------------------+
| ṭṛì | ḍḍumai hello |
+-----------------------------+-----------------------------------------+
  1. Адреса электронной почты
SELECT FROM_BASE64('dXNlckBleGFtcGxlLmNvbQ=='), FROM_BASE64('YWRtaW4udGVzdEBjb21wYW55Lm9yZw==');
+-----------------------------------------+-------------------------------------------------+
| FROM_BASE64('dXNlckBleGFtcGxlLmNvbQ==') | FROM_BASE64('YWRtaW4udGVzdEBjb21wYW55Lm9yZw==') |
+-----------------------------------------+-------------------------------------------------+
| user@example.com | admin.test@company.org |
+-----------------------------------------+-------------------------------------------------+
  1. Данные JSON
SELECT FROM_BASE64('eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9'), FROM_BASE64('WzEsMiwzLDQsNV0=');
+-------------------------------------------------+---------------------------------+
| FROM_BASE64('eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9') | FROM_BASE64('WzEsMiwzLDQsNV0=') |
+-------------------------------------------------+---------------------------------+
| {"name":"John","age":30} | [1,2,3,4,5] |
+-------------------------------------------------+---------------------------------+
  1. Кодирование и обратное декодирование с помощью TO_BASE64
SELECT FROM_BASE64(TO_BASE64('Hello')), FROM_BASE64(TO_BASE64('测试'));
+---------------------------------+----------------------------------+
| FROM_BASE64(TO_BASE64('Hello')) | FROM_BASE64(TO_BASE64('测试')) |
+---------------------------------+----------------------------------+
| Hello | 测试 |
+---------------------------------+----------------------------------+