W MySQL funkcja UNHEX()
funkcja pozwala na „odheksowanie” napisu w MySQL. Innymi słowy, umożliwia konwersję wartości szesnastkowej na ciąg czytelny dla człowieka.
W szczególności funkcja interpretuje każdą parę znaków w argumencie jako liczbę szesnastkową i konwertuje ją na bajt reprezentowany przez liczbę. Zwracana wartość to ciąg binarny.
Składnia
Składnia wygląda tak:
UNHEX(str)
Gdzie str
jest ciągiem do unhex.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład:
SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed;
Wynik:
+--------------+ | Unhexed | +--------------+ | Coconut palm | +--------------+
Podałem więc wartość szesnastkową jako argument, a funkcja rozwinęła tę wartość i zwróciła wynik (który jest ciągiem binarnym).
Przykład 2 – Konwersja ciągu do postaci szesnastkowej
Możemy również zrobić odwrotnie, używając HEX()
funkcja do konwersji ciągu na wartość szesnastkową:
SELECT HEX('Coconut palm') AS Hexed;
Wynik:
+--------------------------+ | Hexed | +--------------------------+ | 436F636F6E75742070616C6D | +--------------------------+
Dlatego moglibyśmy zagnieździć jedną funkcję w drugiej i po prostu otrzymalibyśmy zwrócony argument:
SELECT UNHEX(HEX('Coconut palm')) AS 'Result 1', HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2';
Wynik:
+--------------+--------------------------+ | Result 1 | Result 2 | +--------------+--------------------------+ | Coconut palm | 436F636F6E75742070616C6D | +--------------+--------------------------+
Przykład 3 – Nieprawidłowe znaki szesnastkowe
Argument musi zawierać prawidłowe znaki szesnastkowe. Jeśli którykolwiek ze znaków nie jest prawidłowym znakiem szesnastkowym, wynikiem będzie NULL
:
SELECT UNHEX(' '), UNHEX('_xyz');
Wynik:
+------------+---------------+ | UNHEX(' ') | UNHEX('_xyz') | +------------+---------------+ | NULL | NULL | +------------+---------------+
Przykład 4 – Argumenty numeryczne
UNHEX()
funkcja nie działa na szesnastkowych odpowiednikach wartości liczbowych.
Oto przykład tego, co mam na myśli:
SELECT HEX(1234), UNHEX('4D2');
Wynik:
+-----------+--------------+ | HEX(1234) | UNHEX('4D2') | +-----------+--------------+ | 4D2 | ? | +-----------+--------------+
Innym sposobem zademonstrowania tego byłoby:
SELECT UNHEX(HEX(1234));
Wynik:
+------------------+ | UNHEX(HEX(1234)) | +------------------+ | ? | +------------------+
To pokazuje nam, że szesnastkowy odpowiednik 1234 to 4D2 i UNHEX()
funkcja nie może obsłużyć tej wartości.
W takich przypadkach możesz użyć CONV()
funkcja zamiast:
SELECT HEX(1234), CONV('4D2', 16, 10), CONV(HEX(1234), 16, 10);
Wynik:
+-----------+---------------------+-------------------------+ | HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) | +-----------+---------------------+-------------------------+ | 4D2 | 1234 | 1234 | +-----------+---------------------+-------------------------+
W tym przykładzie używamy CONV()
aby przekonwertować wartość z podstawy 16 (szesnastkowej) na podstawę 10 (dziesiętną).