今日、アプリケーションを AWS にデプロイしたところ、バックグラウンドでの変更内容が送信された後にプログラムがエラーを報告していることがわかりました。調査の結果、データを更新するときに、データ テーブルのタイムスタンプ タイプ フィールドのデフォルト値が「」に変更されていることがわかりました。 0000-00-00 00: 00:00.000000」形式のため、解析エラーが発生します。
mysqlでのこのフィールドの作成ステートメントは次のとおりです
`XXX` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 通常は、現在のデータ変更の時刻形式である必要があります
ローカル開発環境のテスト ただし、そのような問題はなく、アプリケーション環境は同じままです。唯一の違いは、本番環境のデータベースが AWS RDS の MySQL を使用していることです。エラー情報を検索したところ、おそらく MySQL に問題があることがわかりました。パラメータの設定。
公式の mysql ドキュメントを参照してください
デフォルトでは、最初の TIMESTAMP 列には DEFAULT CURRENT_TIMESTAMP と ON UPDATE CURRENT_TIMESTAMP (どちらも明示的に指定されていない場合) の両方が含まれます。
多くの場合、これは私たちが望むものではありません。これを無効にするにはどうすればよいですか?
1.「explicit_defaults_for_timestamp」の値をONに設定します。
2. "explicit_defaults_for_timestamp" の値は依然として OFF であり、これを無効にする方法は 2 つあります
1> DEFAULT 句を使用して列のデフォルト値を指定します
2> 列に NULL 属性を指定します。
mysql> show variables like '%explicit_defaults_for_timestamp%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | explicit_defaults_for_timestamp | OFF | +---------------------------------+-------+ row in set (0.00 sec)
開発環境のexplicit_defaults_for_timestampの値はOFFです
RDSのmysqlのパラメータを比較したところ、パラメータ値が0であることが分かりました。rdsのmysqlのデフォルトのパラメータグループは変更が許可されていないため、パラメータグループを作成しましたが、デフォルトではデフォルトのパラメータグループが引き継がれます。このとき、0と1がonとoffにどのように対応するのかわからなかったので、値を1に変更しました。その後、rdsを再起動します。
現時点では、そのようなエラーは発生しないことがわかりました。
rdsのmysqlのパラメータを次の状況に変更します。完璧な解決策です
explicit_defaults_for_timestamp = 1