UNHEX(str)

UNHEX(str)

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 を戻します。