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

MySQLのMAKE_SET()関数:文字列がすべてNULLの場合に何が返されるか?

MySQLのMAKE_SET()関数では、引数として渡された文字列がすべてNULLである場合、結果として空の文字列が返されます。これは、MAKE_SET()関数がビットマスクに基づいて文字列を選択する仕組みを持っているためです。選択対象となる有効な文字列が一つも存在しない場合、関数は何も含まない空の結果を返します。

動作例

以下の例では、3つの引数すべてにNULLを指定してMAKE_SET()関数を実行しています。

mysql> Select MAKE_SET(2, NULL,NULL,NULL);
+-----------------------------+
| MAKE_SET(2, NULL,NULL,NULL) |
+-----------------------------+
|                             |
+-----------------------------+
1 row in set (0.00 sec)

結果の解説

上記の出力からわかるように、クエリ自体は正常に実行され(1 row in set)、エラーは発生しません。しかし、返される値は空の文字列となっています。

この挙動の理由を簡単に説明すると、MAKE_SET()関数は第1引数の数値をビットマスクとして解釈し、そのビットが立っている位置に対応する文字列だけをカンマ区切りで連結して返します。上記の例ではビットマスク「2」により2番目の文字列(第2引数)が選択対象となりますが、その値がNULLであるため、結果セットには何も含まれないのです。

補足:一部だけNULLの場合との違い

なお、文字列の一部だけがNULLである場合は、NULL以外の有効な文字列のみが結果に含まれます。NULLの項目は単純にスキップされるため、少なくとも1つでも有効な文字列が存在すれば、空ではない結果が得られます。

  1. ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?

    MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった

  2. MySQLの<=>演算子とは?NULL安全な等価比較の使い方を解説

    MySQLには、NULL値も安全に比較できる特殊な等価演算子 <=>(NULL安全等価演算子)が用意されています。この記事では、<=> 演算子の動作と、通常の = 演算子との違いを具体例とともに解説します。 ケース1:通常の値の比較(= 演算子と同じ動作) <=> 演算子は、NULL以外の値同士を比較する場合、= 演算子とまったく同じように動作します。つまり、両辺の値が等しければ「1(TRUE)」、等しくなければ「0(FALSE)」を返します。 たとえば、次のような比較では、どちらの演算子でも結果は同じになります。 mysql> SELECT 10