1364: Field 'name' doesn't have a default value(フィールド 'name' にデフォルト値がない)
MySQL意味
DEFAULT のない NOT NULL として定義された列に値を指定せずに行が挿入された。厳密 SQL モードでは、欠落した必須列を自動的に補完できないため MySQL はエラーを発生させる。
原因
必須 (NOT NULL、DEFAULT なし) 列が INSERT から省略されており、sql_mode で STRICT_TRANS_TABLES/STRICT_ALL_TABLES が有効になっている。古い寛容なモード向けに書かれたアプリケーションを、厳密モードが有効なサーバーに移行するとこのエラーに遭遇する。
対処方法
INSERT に欠落した列の値を追加するか、列に適切な DEFAULT を定義する: ALTER TABLE my_table MODIFY my_column ... NOT NULL DEFAULT 'value'; 列が本当に任意であれば NULL を許可する。一時的/互換性のための回避策として sql_mode を緩和することもできるが、データ品質のため厳密モードの維持を推奨する。
同じデータベースの他の項目
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(無効な JSON テキスト)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value(値に対応するパーティションがない)
- 1049Unknown database 'name'(不明なデータベース 'name')
- 1206The total number of locks exceeds the lock table size(ロックの総数がロックテーブルのサイズを超えた)
- 1236Got fatal error 1236 from master when reading data from binary log(バイナリログの読み取り中にマスターから致命的エラー 1236)
- 1129Host 'host' is blocked because of many connection errors(接続エラーが多いためホスト 'host' がブロックされた)
- 1194Table 'name' is marked as crashed and should be repaired(テーブル 'name' がクラッシュとしてマークされ修復が必要)