【MySQL】UNHEX()関数に16進数以外の値を指定すると何が返される?
MySQLでは、UNHEX()関数の引数として16進数として有効でない文字列や数値を指定した場合、エラーにはならずNULLが返されます。
UNHEX()関数は、本来16進数形式の文字列をバイト列(バイナリデータ)に変換するための関数です。そのため、引数に16進数として解釈できない文字が含まれていると、変換処理が行えずNULLを返す仕様になっています。
動作例:16進数以外の値を指定した場合
mysql> Select UNHEX('ANK96598');
+-------------------+
| UNHEX('ANK96598') |
+-------------------+
| NULL |
+-------------------+
1 row in set (0.00 sec)結果がNULLになる理由
16進数として有効な文字は、次の範囲に限定されます。
- 数字:0〜9
- 英大文字:A〜F
- 英小文字:a〜f
上記の例で指定した「ANK96598」には、「K」「N」という16進数として無効な文字が含まれています。そのため、UNHEX()関数は変換を行うことができず、結果としてNULLを返します。
ポイントまとめ
- UNHEX()関数は無効な入力に対してエラーを発生させず、静かにNULLを返す
- アプリケーション側では、NULLが返された場合のハンドリングを考慮しておくと安全
- 逆に、有効な16進数文字列(例:'4D7953514C')を指定すれば、対応するバイナリデータが正しく返される
-
MySQLのINTERVAL()関数とは?構文と戻り値の仕組みを実例付きで解説
MySQLのINTERVAL()関数は、第1引数とそれ以降の複数の引数を比較し、「第1引数より大きい値」が最初に現れる位置(インデックス)を返す関数です。複数の閾値と一度に大小比較を行いたい場合などに活用できます。 INTERVAL()関数の構文 INTERVAL(N, N1, N2, N3, …) この関数は、第1引数であるNを、残りの引数であるN1、N2、N3…と順番に比較していきます。すべての引数は整数として扱われ、比較結果に応じて以下のような値を返します。 N < N1 の場合 → 0 を返す N < N2 の場合 → 1 を返す N < N3 の場合 → 2
-
MySQLのMAKE_SET()関数がNULLを返すのはどのような場合か?
MySQLのMAKE_SET()関数は、第1引数に指定したビット値そのものがNULLである場合に、結果としてNULLを返します。一方、文字列側の引数にNULLが含まれていても、それらは単に無視されるだけで、エラーにはなりません。MAKE_SET()関数は、第1引数のビット値をもとに、対応する位置の文字列をカンマ区切りで連結して返す関数です。どのような条件でNULLが返るのか、具体的な実行例を見ていきましょう。例1:第1引数(ビット値)がNULLの場合mysql> Select MAKE_SET(NULL, A,B,C); +-----------------------------+ |