勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLで「doesn't have a default value」エラーの対処

  MySQL データベース

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 = '';

 

参考サイト

https://www.wakuwakubank.com/posts/414-mysql-sqlmode/

https://qiita.com/dogyear/items/75bb3d4deea1daf708c2

 - MySQL データベース

  関連記事

MySQLで月別に集計を行う。あと日付時刻関数。
MySQLで月別に集計を行う。あと日付時刻関数。

現在進行形でやっているデータ集計系だけど 新たな発見があったのでメモ。 ■日付時 ...

htmlspecialcharsを通してMySQLに格納したものを元に戻して出力
htmlspecialcharsを通してMySQLに格納したものを元に戻して出力

MySQLにHTMLタグを入れたくない場合にhtmlspecialcharsを使 ...

MySQLで文字列を置換する方法
MySQLで文字列を置換する方法

MySQLで文字列の置換を行いたかった。以下に方法をメモ。   目次1 ...

MySQLのトリガーを使用して特定のテーブルの操作を行った際に別テーブルにログを残す方法
MySQLのトリガーを使用して特定のテーブルの操作を行った際に別テーブルにログを残す方法

MySQLにトリガーという機能があるらしくどのようなものか調べたところ、事前に「 ...

MySQLにてdate型のカラムから曜日を計算し表示する方法
MySQLにてdate型のカラムから曜日を計算し表示する方法

MySQLにてdateもしくはdatetime型のデータを取り出して曜日もあわせ ...