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進数)に変換します。