MySQL で現在の時刻を表現するにはどうすればよいでしょうか?実際、表現方法はいろいろありますが、まとめると次のようになります。
datetime 型と timestamp 型はどちらも、YYYY-MM-DD HH:MM:SS の形式でデータを表すために使用されますが、両者にはいくつかの違いがあります。 結論は
確認する環境の準備、簡単に言うと、タイムスタンプフィールドと日付時刻フィールドを持つテーブルがあり、現在のサーバーはCSTタイムゾーンにあります mysql> show テーブル test_time\G を作成します。 ************************** 1. 行 **************************** テーブル: test_time テーブルの作成: CREATE TABLE `test_time` ( `id` int NOT NULL AUTO_INCREMENT、 `ts` タイムスタンプ(6) NULL デフォルト CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `dt` datetime(6) デフォルト CURRENT_TIMESTAMP(6) 更新時 CURRENT_TIMESTAMP(6)、 主キー (`id`) ) エンジン=InnoDB AUTO_INCREMENT=3 デフォルト文字セット=utf8mb4 COLLATE=utf8mb4_0900_ai_ci セット内の 1 行 (0.00 秒) mysql> '%time_zone%' のような変数を表示します。 +------------------+--------+ | 変数名 | 値 | +------------------+--------+ | システムタイムゾーン | CST | | タイムゾーン | システム | +------------------+--------+ セットに2行(0.01秒) データを挿入します。ts と dt の結果は、現在の CST タイム ゾーンでは同じになります。 mysql> test_time から * を選択します。 空のセット (0.00 秒) mysql> test_time() に値を挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> test_time から * を選択します。 +----+----------------------------+----------------------------+ | id | ts | dt | +----+----------------------------+----------------------------+ | 3 | 2021-12-05 15:04:13.293949 | 2021-12-05 15:04:13.293949 | +----+----------------------------+----------------------------+ セット内の 1 行 (0.00 秒) セッションのタイムゾーンを UTC に設定し、再度クエリを実行します。タイムゾーンが CST から UTC に変更されたため、ts クエリの結果は以前よりも 8 時間遅くなります。dt はタイムゾーン情報を保持していないため、結果は変更されません。 mysql> time_zone='+00:00' を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> test_time から * を選択します。 +----+----------------------------+----------------------------+ | id | ts | dt | +----+----------------------------+----------------------------+ | 3 | 2021-12-05 07:04:13.293949 | 2021-12-05 15:04:13.293949 | +----+----------------------------+----------------------------+ セット内の1行(0.01秒) これは、挿入操作によって生成されたバイナリログにも反映されています。ts は、UTC タイムゾーン情報に相当するタイムスタンプ (1970-01-01 00:00:00 UTC から現在までの秒数) としてバイナリログに保存されます。dt にはタイムゾーン情報がありません。結果は、フォーマットされた文字列 2021-12-05 15:04:13.293949 です。下から 4 行目と 5 行目に注目してください。@2=1638687853.293949 は ts フィールドの値を表し、@3='2021-12-05 15:04:13.293949' は dt フィールドの値を表します。 [mysql %] mysqlbinlog -v --base64-output=デコード行 ./mysqlbin.000012 …… @@SESSION.GTID_NEXT を '1cf4493a-dafd-11eb-944c-4016af29c14c:1416767' に設定します。/*!*/; # 14220 で #211205 15:04:13 サーバー ID 1 end_log_pos 14308 CRC32 0x1fd913a3 クエリ thread_id=137 exec_time=0 error_code=0 タイムスタンプを 1638687853.293949/*!*/ に設定します。 始める //*!*/; # 14308 で #211205 15:04:13 サーバー ID 1 end_log_pos 14368 CRC32 0xbb8937fb Table_map: `testa`.`test_time` が番号 121 にマップされました # 14368 で #211205 15:04:13 サーバー ID 1 end_log_pos 14423 CRC32 0x2e0a3baa Write_rows: テーブル ID 121 フラグ: STMT_END_F ### `testa`.`test_time` に挿入します ### セット ### @1=3 ### @2=1638687853.293949 ### @3='2021-12-05 15:04:13.293949' # 14423 で #211205 15:04:13 サーバー ID 1 end_log_pos 14454 CRC32 0x68cee280 Xid = 1416 専念 /*!*/; ピット
これで、MySQL のタイムスタンプと日付時刻のタイムゾーンの問題によって発生する DTS の落とし穴について詳しく説明しました。MySQL のタイムスタンプと日付時刻の落とし穴の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法
プロジェクトをリリースするときに、キャッシュをクリーンアップする必要があるという問題に遭遇することが...
1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...
この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...
目次序文VirtualDOM とは何ですか? VirtualDOMを使用する理由DOMレンダリングペ...
1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...
目次コンセプト紹介論理的ルール完全なコード主な実装コンセプト紹介セルオートマトンとは、コンピュータの...
この記事では、カレンダー効果を素早く実現するためのJavaScriptの具体的なコードを例として紹介...
1. pipとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンイ...
HTML と CSS で、ボタンの色を設定したいとします。 目的の効果は得られますが、プロセスはかな...
シナリオによっては、Linux サーバー (CentOS/RHEL) の同じイーサネット カード (...
目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...
1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...
公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...
Linux で MySQL データベースをアンインストールするにはどうすればいいですか? 以下では、...
シェルスクリプト #!/bin/sh # 現在のディレクトリ CURRENT_DIR=$( cd &...