В 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 (десетична).