「エラー 1067 (42000): 'created_at' のデフォルト値が無効です」の説明
新しいテーブルを追加してテーブルを変更しようとしたとき列に「エラー 1067」というエラーが表示される場合があります。 (42000): 'created_at' のデフォルト値が無効です。」 「created_at」列自体を変更していないため、このエラーは直感に反するように見えます。
根本原因
この問題は、SQL モードと呼ばれる MySQL 構成設定に起因します。具体的には、「NO_ZERO_IN_DATE」および「NO_ZERO_DATE」SQL モードです。これらのモードでは、デフォルトの日付とタイムスタンプの値に日付と時刻の両方のコンポーネントが含まれるように制限され、「00:00:00」の時刻コンポーネントを含む値は許可されません。
新しいテーブルを作成すると、SQL モードが継承されます。作成時にアクティブになります。これらの SQL モードが有効になっている場合、「created_at」などのタイムスタンプ列のデフォルト値に影響します。これらの SQL モードが有効になっているテーブルに新しい列を追加すると、「created_at」の既存のデフォルト値を上書きしようとしますが、これは許可されていません。
解決
解決するにはこの問題では、次のコマンドを実行することでアクティブな SQL モードを特定できます。
show variables like 'sql_mode' ;
「NO_ZERO_IN_DATE」および「NO_ZERO_DATE」SQL モードが存在します。SQL モードを設定してこれらの制限を削除することで、これらを無効にできます。次のコマンドを使用して、root ユーザーとしてこれをグローバルに実行できます。
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SQL モードに必要な変更を加えた後は、エラーが発生することなく新しい列を追加できるはずです。
以上がMySQL に列を追加すると「エラー 1067 (42000): 'created_at' のデフォルト値が無効です」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。