ホームページ > データベース > mysql チュートリアル > MySQL に列を追加すると「エラー 1067 (42000): 'created_at' のデフォルト値が無効です」というメッセージが表示されるのはなぜですか?

MySQL に列を追加すると「エラー 1067 (42000): 'created_at' のデフォルト値が無効です」というメッセージが表示されるのはなぜですか?

Barbara Streisand
リリース: 2024-12-11 03:50:10
オリジナル
716 人が閲覧しました

Why Am I Getting

「エラー 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート