この記事では、mysql のフィールドのデフォルト値に関して発生する可能性のある関連する問題について説明します。お役に立てば幸いです。
今日、ビジネスから問題が報告されました。modify_time フィールドを null にすることはできず、ビジネス フィードバック フィールドはデフォルト値に設定されています。特定のビジネス エラー メッセージ
エラー メッセージから判断すると、modify_time フィールドにデフォルト値が設定されていないか、デフォルト値が正しく設定されていない可能性があります。
次にテーブル構造を確認します:CREATE TABLE `jj_xxxx` ( .... `create_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00' , `update_user` int DEFAULT NULL, `modify_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00', .... PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4893 DEFAULT CHARSET=utf8 COMMENT='xxxxx'
この変数は MySQL バージョン 5.6.6 から導入されました。グローバル レベルとセッション レベルに分かれています。動的に更新できます。デフォルト値は OFF です。
8.0 では、デフォルト値が on
explicit_defaults_for_timestamp=OFF に変更されました。つまり、デフォルト タイムスタンプのデフォルト形式; タイムスタンプタイプのデフォルト形式は何ですか?
1. 他のフィールド タイプとは異なり、このフィールドのデフォルトは null ではありません。また、デフォルトの null を設定することはできません。 2. 最初の列のタイムスタンプ フィールド (次の場合)指定は強制されません。デフォルト値または on update 属性が使用される場合、デフォルトで DEFAULT CURRENT_TIMESTAMP および ON UPDATE CURRENT_TIMESTAMP に設定されます。 3. 最初以外の列のタイムスタンプ フィールドについては、デフォルト値の指定が強制されない場合、DEFAULT '0000-00-00 00:00:00'4この列に null 値を挿入すると、デフォルト値explicit_defaults_for_timestamp=ON に自動的に変換され、タイムスタンプのデフォルト機能
1 がオフになります。 not null は明示的に指定されていないため、デフォルトは null;2 です。デフォルト値も CURRENT_TIMESTAMP;3 ではなく null になります。not null 属性が指定されており、値がinset メソッドでフィールドが指定されていない場合は、strict sql_mode でエラーが報告されます。 Insert '0000-00-00 00:00:00' under non-strict sql_mode;次のシナリオを慎重に検討する必要があります:
1. タイムスタンプがありません。 null デフォルト CURRENT_TIMESTAMP 、explicit_defaults_for_timestamp が 0 から 1 に変更されると、ビジネスにどのような影響がありますか? タイムスタンプ フィールドにデフォルト値がある場合、このような変換を行うと、タイムスタンプ フィールド値が null の元の挿入ステートメントが失敗し、ビジネスに影響を及ぼします。2. 日時の変換タイムスタンプのデフォルト CURRENT_TIMESTAMP にデフォルトの null を設定すると、ビジネスにどのような影響が生じますか? このようなフィールド変換を行うと、フィールドの元の null 値がすべて CURRENT_TIMESTAMP に変換されます。履歴データが大量にある場合、このような変換はリソースを非常に消費します。同時に、価値観の変化がビジネスに与える影響も考慮する必要があります。 推奨学習:以上がMySQL 8.0 タイムスタンプによって引き起こされる問題の共有例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。