In MariaDB, HEX() is a built-in string function that returns a hexadecimal string representation of its argument.
It works like this:
- If its argument is a number,
HEX()returns a string representation of the hexadecimal value of the number. - If the argument is a string,
HEX()returns a hexadecimal string representation of the string, where each byte of each character in the string is converted to two hexadecimal digits. - Starting in MariaDB 10.5.0,
HEX()with anINET6argument returns a hexadecimal representation of the underlying 16-byte binary string.
Syntax
The syntax goes like this:
HEX(N_or_S)
Where N_or_S is a number or a string.
Example
Here’s a basic example:
SELECT HEX(15);
Result:
+---------+ | HEX(15) | +---------+ | F | +---------+
Here, we got the hexadecimal value of 15, which is F.
In decimal, the counting would go like this: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.
But in hexadecimal, it goes like this: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
So if our number had been between 0 and 9, we would have got the same value as its decimal counterpart.
Here’s another example that demonstrates how the hexadecimal system increments its values:
SELECT
HEX(0),
HEX(1),
HEX(2),
HEX(3),
HEX(4),
HEX(5),
HEX(6),
HEX(7),
HEX(8),
HEX(9),
HEX(10),
HEX(11),
HEX(12),
HEX(13),
HEX(14),
HEX(15),
HEX(16),
HEX(17),
HEX(18),
HEX(19),
HEX(20),
HEX(21),
HEX(22),
HEX(23),
HEX(24),
HEX(25),
HEX(26),
HEX(27),
HEX(28),
HEX(29),
HEX(30),
HEX(31),
HEX(32),
HEX(789456768);
Result (using vertical output):
HEX(0): 0
HEX(1): 1
HEX(2): 2
HEX(3): 3
HEX(4): 4
HEX(5): 5
HEX(6): 6
HEX(7): 7
HEX(8): 8
HEX(9): 9
HEX(10): A
HEX(11): B
HEX(12): C
HEX(13): D
HEX(14): E
HEX(15): F
HEX(16): 10
HEX(17): 11
HEX(18): 12
HEX(19): 13
HEX(20): 14
HEX(21): 15
HEX(22): 16
HEX(23): 17
HEX(24): 18
HEX(25): 19
HEX(26): 1A
HEX(27): 1B
HEX(28): 1C
HEX(29): 1D
HEX(30): 1E
HEX(31): 1F
HEX(32): 20
HEX(789456768): 2F0E2780
Strings
As mentioned, if the argument is a string, HEX() returns a hexadecimal string representation of the string, where each byte of each character in the string is converted to two hexadecimal digits.
Example:
SELECT
HEX('a'),
HEX('aa'),
HEX('A'),
HEX('AA'),
HEX('b'),
HEX('bb'),
HEX('B'),
HEX('BB'),
HEX('Cat'),
HEX('Dog'),
HEX('Paws & Claws'),
HEX('Zebra');
Result (using vertical output):
HEX('a'): 61
HEX('aa'): 6161
HEX('A'): 41
HEX('AA'): 4141
HEX('b'): 62
HEX('bb'): 6262
HEX('B'): 42
HEX('BB'): 4242
HEX('Cat'): 436174
HEX('Dog'): 446F67
HEX('Paws & Claws'): 50617773202620436C617773
HEX('Zebra'): 5A65627261
INET6
Starting in MariaDB 10.5.0, HEX() with an INET6 argument returns a hexadecimal representation of the underlying 16-byte binary string.
Example:
SELECT HEX(CAST('2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b' AS INET6));
Result:
+---------------------------------------------------------------+
| HEX(CAST('2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b' AS INET6)) |
+---------------------------------------------------------------+
| 20010DB83C4D0015000000001A2F1A2B |
+---------------------------------------------------------------+
Here it is again, but using the abbreviated form of the same IPv6 address:
SELECT HEX(CAST('2001:db8:3c4d:15::1a2f:1a2b' AS INET6));
Result:
+---------------------------------------------------+
| HEX(CAST('2001:db8:3c4d:15::1a2f:1a2b' AS INET6)) |
+---------------------------------------------------+
| 20010DB83C4D0015000000001A2F1A2B |
+---------------------------------------------------+
Null Arguments
Passing null to HEX() results in null:
SELECT HEX(null);
Result:
+-----------+ | HEX(null) | +-----------+ | NULL | +-----------+
Passing No Arguments
Calling HEX() without passing any arguments results in an error:
SELECT HEX();
Result:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'HEX'