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