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