勉強したことのメモ

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

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

   2026/09/14  MySQL / MariaDB データベース

MySQLでINSERT時に「Field 'カラム名' doesn't have a default value」というエラーが発生した。ちなみに当該カラムはdatetime形式でINSERT時は何も値を入れない(UPDATE時に入れる予定)という状況。さらに本件は複数のサーバで作業中、3台中2台は正常に動作し、残りの1台でのみ発生していた。以下に原因と対応方法をメモ。

 

原因

MySQLモードの「STRICT_TRANS_TABLES」というのにひっかかっていたようで、デフォルト値を設定していないカラムがあり、そのカラムをINSERT時に指定していなかったため発生した。

また、使用していたサーバはいずれも同じ会社のものと聞いていたため、MySQLのバージョンも同じかと思いきやそれは勘違いで、新しいバージョンのものでエラーが発生していた。

ちなみに以下でSQLモードを確認できる。

SELECT @@global.sql_mode;

@@global.sql_mode
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 

対象方法

INSERT時に正常な値を入れる

空でもいいので何らかの値を入れる。datetime型の場合は「NO_ZERO_DATE / NO_ZERO_IN_DATE」が設定されていない場合は「0000-00-00 00:00:00」指定でもOKで指定されている場合はNULL指定にする。

MySQLモードを変更する

以下でMySQLモードを変更した。ただしMySQLサーバを再起動すると元の設定に戻るため非推奨。

SET GLOBAL sql_mode = '';

MySQL側でデフォルト値を設定する

text / varchar型の場合は空でもいい。

datetime型の場合は「NO_ZERO_DATE / NO_ZERO_IN_DATE」が設定されていない場合は「0000-00-00 00:00:00」指定でもOKで指定されている場合はNULL指定にする。

 

参考サイト

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

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

 - MySQL / MariaDB データベース

  関連記事

MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法
MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法

何らかのフォームとMySQLを組み合わせた際に任意入力の項目はそのカラムがNUL ...

MySQLでテーブル構造とデータをコピーする方法
MySQLでテーブル構造とデータをコピーする方法

MySQLで既にあるテーブルとデータに対して実験を行う必要があった。本番テーブル ...

MySQLでテキスト(日本語、半角英数字)を暗号化・復号化する方法
MySQLでテキスト(日本語、半角英数字)を暗号化・復号化する方法

MySQLでデータを登録する際に暗号化したいというケースがあった。対象のデータは ...

Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

MySQLのview(ビュー)で仮想的なテーブルを作成する方法
MySQLのview(ビュー)で仮想的なテーブルを作成する方法

MySQL関連のサイトを見ているとview(ビュー)が云々という記事を見かけた。 ...