No MySQL, o
UNHEX()
A função permite que você “deshex” uma string no MySQL. Em outras palavras, ele permite converter um valor hexadecimal em uma string legível por humanos. Especificamente, a função interpreta cada par de caracteres no argumento como um número hexadecimal e o converte no byte representado pelo número. O valor de retorno é uma string binária.
Sintaxe
A sintaxe fica assim:
UNHEX(str)
Onde
str
é a string para unhex. Exemplo 1 – Uso básico
Segue um exemplo básico:
SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed;
Resultado:
+--------------+ | Unhexed | +--------------+ | Coconut palm | +--------------+
Então eu forneci um valor hexadecimal como um argumento, e a função unhexed esse valor e retornou o resultado (que é uma string binária).
Exemplo 2 – Converter uma string para hexadecimal
Também podemos fazer o inverso usando o
HEX()
função para converter a string em um valor hexadecimal:SELECT HEX('Coconut palm') AS Hexed;
Resultado:
+--------------------------+ | Hexed | +--------------------------+ | 436F636F6E75742070616C6D | +--------------------------+
Portanto, poderíamos aninhar uma função dentro da outra e simplesmente obteríamos nosso argumento retornado:
SELECT UNHEX(HEX('Coconut palm')) AS 'Result 1', HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2';
Resultado:
+--------------+--------------------------+ | Result 1 | Result 2 | +--------------+--------------------------+ | Coconut palm | 436F636F6E75742070616C6D | +--------------+--------------------------+
Exemplo 3 – Caracteres hexadecimais inválidos
O argumento deve conter caracteres hexadecimais válidos. Se algum dos caracteres não for um caractere hexadecimal válido, o resultado será
NULL
:SELECT UNHEX(' '), UNHEX('_xyz');
Resultado:
+------------+---------------+ | UNHEX(' ') | UNHEX('_xyz') | +------------+---------------+ | NULL | NULL | +------------+---------------+
Exemplo 4 – Argumentos Numéricos
O
UNHEX()
A função não funciona nos equivalentes hexadecimais de valores numéricos. Aqui está um exemplo do que quero dizer:
SELECT HEX(1234), UNHEX('4D2');
Resultado:
+-----------+--------------+ | HEX(1234) | UNHEX('4D2') | +-----------+--------------+ | 4D2 | ? | +-----------+--------------+
Outra forma de demonstrar isso seria:
SELECT UNHEX(HEX(1234));
Resultado:
+------------------+ | UNHEX(HEX(1234)) | +------------------+ | ? | +------------------+
Isso nos mostra que o equivalente hexadecimal de 1234 é 4D2 , e o
UNHEX()
função não pode lidar com esse valor. Nesses casos, você pode usar o
CONV()
função em vez disso:SELECT HEX(1234), CONV('4D2', 16, 10), CONV(HEX(1234), 16, 10);
Resultado:
+-----------+---------------------+-------------------------+ | HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) | +-----------+---------------------+-------------------------+ | 4D2 | 1234 | 1234 | +-----------+---------------------+-------------------------+
Neste exemplo, usamos
CONV()
para converter o valor de base 16 (hexadecimal) para base 10 (decimal).