MySQL

mysqlにカラムを追加しようとしたらInvalid default value for エラー

Invalid default value fo...

mysqlに新しくalter table wp_users add user_image varchar(100);
のように、カラムを追加しようとしたらInvalid default value for 'create_date' timestamp fieldというエラーが出てmysqlにカラムを追加出来なくなりました。解決方法を書き残しておこうと思います

原因はNO_ZERO_DATE

これは、サーバーのSQLモード(NO_ZERO_DATE)が原因です。例えば、既存のカラムに日付を挿入するためのカラムがあったとします。新しくカラムを追加すると、このカラム日付の中の既存データには0000-00-00という値が入ることになるわけですがNO_ZERO_DATEという厳密モードでは、有効な日付として '0000-00-00'を許可できません。

Invalid default value for 'create_date' timestamp field

my.cnfを探す

サーバーのSQLモード(NO_ZERO_DATE)を解除してあげる必要があります、どうにか自力で貴殿のサーバーの中からmy.cnfを探し出してください。多分、下記のようなコマンドで探せるはずです。

mysql --help | grep my.cnf

[mysqld]の下に書く

無事my.cnfを見つけられたら下記のようにsudo vi /opt/bitnami/mysql/my.cnfのようにしてファイルを編集してください。もし、viの使い方がわからなければ、周りに聞いてください。my.cnfの中には[mysqld]と記述された部分があるはずです。あればそこを編集、なければ新しく追加で、下記のように記述してください。

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

mysqlを再起動

最後に、mysqlの再起動コマンドをを探し出し、正常に再起動ができれば完了です

sudo /opt/bitnami/ctlscript.sh restart

環境

ここまでの自分の環境は

  • Lightsail
  • Amazon AWS
  • Bitnami

参考

Invalid default value for 'create_date' timestamp field