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 = '';
参考サイト
関連記事
-
-
さくらインターネットでCronからmysqldumpすると0バイトのファイルが生成される
さくらインターネットのレンタルサーバでmysqldumpした結果をファイルとして ...
-
-
MySQLで特定のテーブルにパーティショニング設定し高速化を図る方法
以前に他社が設計されたログ系のテーブルを拝見した際にパーティショニング設定が行わ ...
-
-
MySQLでCSVから列を指定してインポート
MySQLでCSVからデータをインポートしたかった。またエクセル風にいうA列はi ...
-
-
MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法
MySQLで「開始日時」「終了日時」のdatetime型カラムがあり、開始から終 ...
-
-
MySQLでテキスト(日本語、半角英数字)を暗号化・復号化する方法
MySQLでデータを登録する際に暗号化したいというケースがあった。対象のデータは ...