MySQL – sql_modeについて

こんにちは sohnishi です。

突然ですが、みなさんMySQLにおけるsql_modeというものをご存知でしょうか。

私は最近知りました。。。

普段、sql_modeの事など気にして開発したことはありません。。。

つい先日、

原因不明のバグと格闘していました。

PHPでの改修作業を行なっていると、一切触っていない箇所で、

Field ‘hogehoge’ doesn’t have a default value

が発生し、???な状況になりました。

ソースのどこを探しても、hogehogeに値を入れてあげている箇所がありません。

もしかして本番でも動いてないの?そんなハズないよな〜と思いつつ格闘していると、

MySQLのバージョン差異によるsql_modeの違いが原因でした。

改修と同時に諸々のバージョンアップを行なっていたため、

MySQLのバージョンもそれに合わせてしまっていたのです。

MySQLバージョン:5.7.23

sql_mode:’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

MySQLバージョン:5.5.x(確か)

sql_mode:”

この違いで具体的にどのような事が起きるかというと、

後者(sql_mode:”)は、

INSERT時、Not Nullのフィールドに値を入れなくてもINSERTできちゃうんです。。。

どうやらNOT NULL補完という 今の私には存在意義がよくわからない機能が働くようです。

INT型のフィールドには、勝手に「0」を入れられていました。

VARCHAR型のフィールドは空文字を入れられてしまいます。

その他は試していません。

 

 

詳しい方、NOT NULL補完の存在意義を教えてください。

それでは。

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です