MySQLでは、UNHEX() 関数を使用すると、MySQLで文字列を「アンヘックス」できます。つまり、16進値を人間が読める形式の文字列に変換できます。
具体的には、この関数は引数内の文字の各ペアを16進数として解釈し、その数値で表されるバイトに変換します。戻り値はバイナリ文字列です。
構文
構文は次のようになります:
UNHEX(str)
str 解凍する文字列です。
例1-基本的な使用法
基本的な例は次のとおりです。
SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed; 結果:
+--------------+ | Unhexed | +--------------+ | Coconut palm | +--------------+
そこで、引数として16進値を指定すると、関数はその値の16進を解除し、結果(バイナリ文字列)を返しました。
例2–文字列を16進数に変換する
HEX()を使用して逆を行うこともできます 文字列を16進値に変換する関数:
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–無効な16進文字
引数には、有効な16進文字が含まれている必要があります。いずれかの文字が有効な16進文字でない場合、結果はNULLになります。 :
SELECT
UNHEX(' '),
UNHEX('_xyz'); 結果:
+------------+---------------+
| UNHEX(' ') | UNHEX('_xyz') |
+------------+---------------+
| NULL | NULL |
+------------+---------------+
例4–数値引数
UNHEX() 関数は、16進数に相当する数値では機能しません。
これが私の言いたいことの例です:
SELECT
HEX(1234),
UNHEX('4D2'); 結果:
+-----------+--------------+
| HEX(1234) | UNHEX('4D2') |
+-----------+--------------+
| 4D2 | ? |
+-----------+--------------+
これを示す別の方法は次のとおりです。
SELECT UNHEX(HEX(1234));
結果:
+------------------+ | UNHEX(HEX(1234)) | +------------------+ | ? | +------------------+
つまり、これが示すのは、 1234に相当する16進数であるということです。 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(16進数)から基数10(10進数)に変換します。