MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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')を指定すれば、対応するバイナリデータが正しく返される
  1. 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

  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); +-----------------------------+ |