【mariadbエラー】Fatal error: Uncaught mysqli_sql_exception: Field

webサイトを新サーバーに移行してmysqlもバージョンアップしたがエラーが出るようになった

Fatal error: Uncaught mysqli_sql_exception: Field 'chk1_20170804' doesn't have a default value in /var/www/html/hyogen/input/check.php:207 Stack trace: #0 /var/www/html/hyogen/input/check.php(207): mysqli->query() #1 {main} thrown in /var/www/html/hyogen/input/check.php on line 207

これはデータを更新するときにフィールドにデフォルト値が設定されていないときに発生する

MySQLのバージョンや設定によっては、STRICT_TRANS_TABLES モードが有効になっていると、デフォルト値が指定されていない NOT NULL カラムに対して空の値を挿入できず、エラーになる

対処法

my.cnfおよびmy.cnf.d以下のファイル内の[mysqld]セクションを以下のように変更。[mysqld]セクション自体が見つからない場合は、my.cnfに追加

[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"

[mysqld]は、MySQLサーバーに関する設定であることを意味する

再起動で設定を反映

sudo systemctl restart mysqld

どうしてこの設定で STRICT_TRANS_TABLES が無効になるのか?

sql_mode は、MySQLで使用されるSQLの動作モードを指定するもの。
STRICT_TRANS_TABLES がデフォルトで有効な場合、sql_mode に明示的に STRICT_TRANS_TABLES を含めないことで、その動作を無効化できる。
NO_ENGINE_SUBSTITUTION は、エンジンが指定されたときに存在しない場合、エラーを発生させる設定

タイトルとURLをコピーしました