MySQLで「doesn't have a default value」エラーの対処
MySQLでINSERT時に「Field 'カラム名' doesn't have a default value」というエラーが発生した。ちなみに当該カラムはdatetime形式でINSERT時は何も値を入れない(UPDATE時に入れる予定)という状況。さらに本件は複数のサーバで作業中、3台中2台は正常に動作し、残りの1台でのみ発生していた。以下に原因と対応方法をメモ。
原因
MySQLモードの「STRICT_TRANS_TABLES」というのにひっかかったっぽい。
また、使用していたサーバはいずれも同じ会社のものと聞いていたため、各種バージョンも同じかと思いきやそれは勘違いで新しいバージョンのものでエラーが発生していた。
対象方法
INSERT時に正常な値を入れる
now()等で正常な値を入れるのが正攻法っぽい。ただ、今回は複数のサーバで同じプログラムを動かしたいというケースだったので差分は作りたくなかったため、次の方法を取った。
MySQLモードを変更する
以下でMySQLモードを変更した。恐らく非推奨。
SET GLOBAL sql_mode = '';
参考サイト
関連記事
-
-
MySQLでユーザー作成時にエラーが発生
SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...
-
-
MySQLでオートインクリメントを使用せずにグループ毎に連番を設定する方法
MySQLでオートインクリメントを使用せずにグループ毎で連番を割り振りたかった。 ...
-
-
エックスサーバーでMySQLのサイズに注意
エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...
-
-
MySQLでINSERT時にオートインクリメントではないカラムに連番を登録する方法
MySQLでINSERT時にオートインクリメントではないカラムに連番を登録したい ...
-
-
PHPからMySQLにシリアライズしたデータを格納
アンケートフォームみたいなのがあって、 今後も定期開催し、尚且つ質問内容は増減す ...