HEX(str)
の逆演算を行います。引数内の 16 進数のそれぞれのペアを数字として解釈し、それを数字で表される文字に変換します。結果としての文字はバイナリ
ストリングとして戻されます。
mysql>SELECT UNHEX('4D7953514C');
-> 'MySQL' mysql>SELECT 0x4D7953514C;
-> 'MySQL' mysql>SELECT UNHEX(HEX('string'));
-> 'string' mysql>SELECT HEX(UNHEX('1267'));
-> '1267'
引数ストリング内の文字は、正当な 16 進数である必要があります : '0'
.. '9'
, 'A'
.. 'F'
, 'a'
.. 'f'
. UNHEX()
が引数内で非 16 進数に遭遇する場合は NULL
を戻します :
mysql> SELECT UNHEX('GG');
+-------------+
| UNHEX('GG') |
+-------------+
| NULL |
+-------------+
NULL
という結果は、UNHEX()
への引数が BINARY
カラムである場合、値が保存される時に 0x00 バイトでパッドされるために起こりますが、これらのバイトは検索でストリップされません。例えば、'aa'
は 'aa '
として CHAR(3)
カラムに保存され、'aa'
( トレーリング パッド スペースがストリップされた状態 ) として検索されます。それにより、カラム値の UNHEX()
は A'
を戻します。それに対し、'aa'
は BINARY(3)
カラムに 'aa\0'
として保存され、'aa\0'
( トレーリング パッド 0x00
バイトがストリップされていない常態で ) として検索されます。'\0'
は正当な 16 進数ではないので、カラム値の UNHEX()
は NULL
を戻します。