I MySQL, UNHEX()
funktionen låter dig "avhexa" en sträng i MySQL. Med andra ord låter den dig konvertera ett hexadecimalt värde till en läsbar sträng.
Specifikt tolkar funktionen varje teckenpar i argumentet som ett hexadecimalt tal och konverterar det till den byte som representeras av talet. Returvärdet är en binär sträng.
Syntax
Syntaxen ser ut så här:
UNHEX(str)
Där str
är strängen som ska unhex.
Exempel 1 – Grundläggande användning
Här är ett grundläggande exempel:
SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed;
Resultat:
+--------------+ | Unhexed | +--------------+ | Coconut palm | +--------------+
Så jag angav ett hex-värde som ett argument, och funktionen tog bort det värdet och returnerade resultatet (som är en binär sträng).
Exempel 2 – Konvertera en sträng till hexadecimal
Vi kan också göra det omvända genom att använda HEX()
funktion för att konvertera strängen till ett hexadecimalt värde:
SELECT HEX('Coconut palm') AS Hexed;
Resultat:
+--------------------------+ | Hexed | +--------------------------+ | 436F636F6E75742070616C6D | +--------------------------+
Därför kunde vi kapsla en funktion i den andra, och vi skulle helt enkelt få vårt argument tillbaka:
SELECT UNHEX(HEX('Coconut palm')) AS 'Result 1', HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2';
Resultat:
+--------------+--------------------------+ | Result 1 | Result 2 | +--------------+--------------------------+ | Coconut palm | 436F636F6E75742070616C6D | +--------------+--------------------------+
Exempel 3 – Ogiltiga hexadecimala tecken
Argumentet måste innehålla giltiga hexadecimala tecken. Om något av tecknen inte är giltiga hexadecken blir resultatet NULL
:
SELECT UNHEX(' '), UNHEX('_xyz');
Resultat:
+------------+---------------+ | UNHEX(' ') | UNHEX('_xyz') | +------------+---------------+ | NULL | NULL | +------------+---------------+
Exempel 4 – Numeriska argument
UNHEX()
Funktionen fungerar inte på hexadecimala ekvivalenter av numeriska värden.
Här är ett exempel på vad jag menar:
SELECT HEX(1234), UNHEX('4D2');
Resultat:
+-----------+--------------+ | HEX(1234) | UNHEX('4D2') | +-----------+--------------+ | 4D2 | ? | +-----------+--------------+
Ett annat sätt att visa detta är:
SELECT UNHEX(HEX(1234));
Resultat:
+------------------+ | UNHEX(HEX(1234)) | +------------------+ | ? | +------------------+
Så vad detta visar oss är att den hexadecimala motsvarigheten till 1234 är 4D2 och UNHEX()
funktion kan inte hantera det värdet.
I sådana fall kan du använda CONV()
funktion istället:
SELECT HEX(1234), CONV('4D2', 16, 10), CONV(HEX(1234), 16, 10);
Resultat:
+-----------+---------------------+-------------------------+ | HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) | +-----------+---------------------+-------------------------+ | 4D2 | 1234 | 1234 | +-----------+---------------------+-------------------------+
I det här exemplet använder vi CONV()
för att konvertera värdet från bas-16 (hexadecimal) till bas-10 (decimal).