mysqlフィールドのtime型タイムスタンプについてデフォルト値は現在時刻です

高洛峰
リリース: 2016-11-05 17:00:04
オリジナル
1220 人が閲覧しました

今日、アプリケーションを 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


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