何者にもなれていない5年目のエンジニアブログ

MySQLのNULL値はPerlでいうundef

記事通りです。

一般常識かもしれないんですが、MySQLのNULLってperlでいうundefになります。

ここで大事なのは、

空入力 ""や、()はNULLにならない

ってことです。perlのNOTは、MySQLのNULLじゃないんですね。

MySQLには

無効値の制約

http://www.y2sunlight.com/ground/?MySQL4.1%2F8.Active%20Perl%A4%C7%A4%CEMySQL%A4%CE%CD%F8%CD%D1

というのがあって、数値カラムに数値で始まらない文字列を格納しようとすると、MySQLサーバは0を格納するので、

数値カラムに""などを入力すると、0となります。

そのため、NULLと違い、ユニーク制約などがある場合、ひっかかったりします。

なので、もし空入力があった場合で、プレースホルダーを使ってNULLを入れたい場合なんかは、入力値$inputを

$input = $input ? $input : undef;

とかしてやったりしてundefにしてやらないとNULLにはなりません。

参考まで