NOT NULL制約のフィールドにNULLが入ってもエラーにならない

http://dev.mysql.com/doc/refman/4.1/ja/constraint-not-null.html

NOT NULL カラムにおける NULL や数値カラムにおける大きすぎる数値のように ‘正しくない’ 値を
カラムに挿入した場合、MySQL ではエラーを生成するのではなく、カラムを ‘最適可能値’ に設定します。
数値については、0、使用可能な最小値、または使用可能な最大値です。
文字列については、空白文字列、またはカラム内で使用可能な最長文字列です。
つまり、NULL 値を使用することができないカラムに NULL を格納しようとすると、
0 または ”(空白文字列)が代わりに格納されます。
NOT NULLの他にも、例えばchar(4)のフィールドに’12345’の文字列をinsertすると’1234’となって格納される。

なにー!
この問題は、STRICTモードにすることで回避できる様子。
5.0.2以上でサポートされてるSTRICT_ALL_TABLESモードを使う。

アプリレベルで対応するなら
SET sql_mode = ‘STRICT_ALL_TABLES’;
をSQLとして流す。

my.cnfに記述することでSTRICTモードにできるようなので以下のようにsql-modeを追記。

[mysqld]
sql-mode=”STRICT_ALL_TABLES”

これで「doesn’t have a default value」エラーを返すようになる。

参考
http://d.hatena.ne.jp/hide-K/20081016/1224123822
http://d.hatena.ne.jp/rivertop/20080911/1221148321