В MySQL, UNHEX() функцията ви позволява да "дехексирате" низ в MySQL. С други думи, той ви позволява да преобразувате шестнадесетична стойност в четим от човека низ.
По-конкретно, функцията интерпретира всяка двойка знаци в аргумента като шестнадесетично число и го преобразува в байта, представен от числото. Връщаната стойност е двоичен низ.
Синтаксис
Синтаксисът е така:
UNHEX(str)
Където str е низът за дехексиране.
Пример 1 – Основна употреба
Ето един основен пример:
SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed; Резултат:
+--------------+ | Unhexed | +--------------+ | Coconut palm | +--------------+
Така че предоставих шестнадесетична стойност като аргумент и функцията премахна тази стойност и върна резултата (който е двоичен низ).
Пример 2 – Преобразуване на низ в шестнадесетичен
Можем да направим и обратното, като използваме HEX() функция за преобразуване на низа в шестнадесетична стойност:
SELECT HEX('Coconut palm') AS Hexed; Резултат:
+--------------------------+ | Hexed | +--------------------------+ | 436F636F6E75742070616C6D | +--------------------------+
Следователно бихме могли да вложим една функция в другата и просто да върнем нашия аргумент:
SELECT
UNHEX(HEX('Coconut palm')) AS 'Result 1',
HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2'; Резултат:
+--------------+--------------------------+ | Result 1 | Result 2 | +--------------+--------------------------+ | Coconut palm | 436F636F6E75742070616C6D | +--------------+--------------------------+
Пример 3 – Невалидни шестнадесетични знаци
Аргументът трябва да съдържа валидни шестнадесетични знаци. Ако някой от знаците не е валиден шестнадесетичен, резултатът ще бъде NULL :
SELECT
UNHEX(' '),
UNHEX('_xyz'); Резултат:
+------------+---------------+
| UNHEX(' ') | UNHEX('_xyz') |
+------------+---------------+
| NULL | NULL |
+------------+---------------+
Пример 4 – Числови аргументи
UNHEX() функцията не работи върху шестнадесетичните еквиваленти на числови стойности.
Ето пример за това, което имам предвид:
SELECT
HEX(1234),
UNHEX('4D2'); Резултат:
+-----------+--------------+
| HEX(1234) | UNHEX('4D2') |
+-----------+--------------+
| 4D2 | ? |
+-----------+--------------+
Друг начин да се демонстрира това би бил:
SELECT UNHEX(HEX(1234));
Резултат:
+------------------+ | UNHEX(HEX(1234)) | +------------------+ | ? | +------------------+
Това ни показва, че шестнадесетичният еквивалент на 1234 е 4D2 и UNHEX() функцията не може да се справи с тази стойност.
В такива случаи можете да използвате CONV() функция вместо това:
SELECT
HEX(1234),
CONV('4D2', 16, 10),
CONV(HEX(1234), 16, 10); Резултат:
+-----------+---------------------+-------------------------+
| HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) |
+-----------+---------------------+-------------------------+
| 4D2 | 1234 | 1234 |
+-----------+---------------------+-------------------------+
В този пример използваме CONV() за да преобразувате стойността от база-16 (шестнадесетична) в база-10 (десетична).