タイムスタンプ比較クエリで遭遇する落とし穴JD.com では、テーブルを作成するときに、MySQL で update_time を timestamp として設定し、create_time を datetime として設定する必要があったことを覚えています。その後、Alibaba のコーディング標準では、両方とも datetime 型である必要があると規定されました。 タイムスタンプと日付時刻の違いは、さまざまな場所で紹介されています。 JD.com では、なぜ update_time をタイムスタンプにする必要があるのか疑問に思うことがあります。場所を取らないからでしょうか?または、タイムスタンプのデフォルト値を設定することしかできませんか (current_timestamp の更新時)?デフォルト値のdatetimeも設定できないのでしょうか?後で Baidu で検索したところ、デフォルト値を設定するための datetime サポートは 5.7 でのみ利用可能であることがわかりました。 JD.com にこのような要件があるのは、以前使用されていた MySQL のバージョンが低すぎたため、update_time を自動的に更新する必要もあったためかもしれません。 現在、企業でもこれが求められており、update_time はタイムスタンプに設定されています。その結果、落とし穴に遭遇しました。同僚が非常に奇妙な問題を発見しました。日付比較クエリには結果がないのに、ログに出力された SQL を直接実行すると結果をクエリできるのはなぜでしょうか? ?なぜこのような矛盾が生じるのでしょうか? これまでにこのようなことは一度もありませんでした。問題を解決するのはいつも楽しいことです。 実際に現地で試してみましたが、確かにそうでした。印刷されたログに問題はありませんでしたが、私たちを「混乱」させ、非常に奇妙な気分にさせたのはログでした。確認したところ、比較されているフィールドはタイムスタンプ型の update_time であることがわかりました。 Alibabaの基準に影響されて、これはタイプの問題だと痛感しました。そこでBaiduで検索してみたところ、タイムゾーンの問題であることがわかりました。データベース接続 URL の後に serverTimezone=GMT%2B8 パラメータを追加するだけです。もちろん、別の方法としては datetime を使用することですが、これにより多くの落とし穴を回避できます。 なぜこの問題が発生するのでしょうか?これは、アプリケーション サーバーと MySQL がデプロイされているサーバーのタイム ゾーンが一致していないためです。このため、印刷ログには問題がないのに、クエリ結果が表示されません (ログに表示される時間はローカル マシンのタイム ゾーンですが、データが MySQL サーバーに転送されると、別のタイム ゾーンの時間になります)。 MySQL の日付にもこの問題があります。 。 。 タイムスタンプクエリ範囲の問題例えばMySQLでは、更新時刻が2020-05-26の場合、クエリはupdate_time <= 2020-05-26となり、見つけることができません。DATE_FORMAT(info.up_time,'%Y-%m-%d') <= '2020-05-26'に変換する必要があります。具体的な理由は不明であり、さらなる調査が必要です。 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: IE10 のパスワードクリアテキスト表示とクイッククリア機能を無効にする方法
目次1.スリープ機能2.タイムアウトを設定する3. 約束4. 非同期待機5. 1秒後に出力1、2秒後...
MySQLデーモンの起動に失敗したエラーの解決方法数日前、公開されたウェブサイトはこれらのアクティビ...
Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...
CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...
1. vue-cli がプロジェクト パッケージを作成した後にページが空白になる問題の解決方法コマン...
目次同時シナリオ書き込む読む読む読み取り-書き込みと書き込み-読み取りMySQL のロック行レベルロ...
1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...
Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...
この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のよ...
要素に関するいくつかの属性フロントエンドの日常的な開発では、一部のページのプロパティを取得または監視...
この記事では、Vue開発ツリー構造コンポーネントの具体的なコードを例として紹介します。具体的な内容は...
1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...
Linux ヘルプ ドキュメントでの echo の説明は、Python や Java などのプログラ...
次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...
インストール環境: CAT /etc/os-release CentOS システムのバージョン情報を...