MySQL の時間保持問題に関する簡単な分析

MySQL の時間保持問題に関する簡単な分析

MySQL のデフォルトの時間タイプ (datetime と timestamp) の精度は秒です。時間値が 1 秒未満の精度で設定されている場合、切り捨てられ、データベース内の値が元の値より 1 秒長くなる可能性があります。つまり、本来は今日に属する記録が、明日は記録される可能性があります。

以下は、時間がどのように丸められるかを示す例です。まずテーブルを作成します。

テーブルtest_timeを作成します(
 time_sec 日付時刻、
 time_millis 日付時刻(3)、
 time_micros 日付時刻(6),
 stamp_sec タイムスタンプ、
 stamp_millis タイムスタンプ(3)
 stamp_micros タイムスタンプ(6)
);

datetime と timestamp を精度で定義できることを知らない読者もいるかもしれません。精度の値は 0 ~ 6 で、保持される小数点以下の桁数を示します。デフォルト値は 0 です。明らかに、3 桁を保持するとミリ秒の精度と見なすことができ、6 桁を保持するとマイクロ秒の精度と見なすことができます。

次にレコードを挿入します。

test_timeに挿入
( 時間_秒、時間_ミリ秒、時間_マイクロ秒、 
 スタンプ秒、スタンプミリ、スタンプマイクロ)
値(
 '2019-11-30 12:34:56.987654', 
 '2019-11-30 12:34:56.987654', 
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654', 
 '2019-11-30 12:34:56.987654', 
 '2019-11-30 12:34:56.987654'
);

次に、別のselect * from test_timeクエリを実行すると、次の結果が表示されます。

時間_秒 | 時間_ミリ | 時間_マイクロ | スタンプ_秒 | スタンプ_ミリ | スタンプ_マイクロ |
---------------------|-----------------------|-----------|-----------------------|------------------------|--------------------------|
2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|

データベース内のtime_secとstamp_secの秒の値が切り上げられ、time_millisとstamp_millisのミリ秒の値が切り上げられていることがわかります。

このようなエラーを回避するには、次の 2 つの方法があります。

  • フィールドを定義するときはdatetime(6)またはtimestamp(6)を使用します。
  • フィールドは精度なしで定義されますが、時間がデータベースに保存される前にミリ秒の値が切り捨てられます。

関連文書:

MySQL 5.6 リファレンス: 時間値の小数秒

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL の日付データ型と時刻型の使用法の概要
  • MySQL における TIMESTAMP の使用法の詳細な説明
  • MySql クエリ期間メソッド
  • MySQL の日付と時刻の形式変換の実装ステートメント
  • mysql 時間差計算関数
  • FROM_UNIXTIME フォーマット MYSQL タイムスタンプ関数
  • Mysql 日付時刻 DATE_FORMAT (日付、形式)
  • MySQL で日付とタイムスタンプを変換するための関数とメソッド
  • MySQL でさまざまな SQL 文を記述して、1 日、1 週間、1 か月の時間データを取得する方法
  • MySQL タイムスタンプ自動更新タイムシェアリング

<<:  レスポンシブ原則をシミュレートするための基礎コードの Vue 実装の例

>>:  Dockerコンテナの起動失敗を解決する方法

推薦する

Nginx 構成の実装 https

目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...

Linux userdel コマンドの使用法

1. コマンドの紹介userdel (ユーザー削除) コマンドは、ユーザー アカウントと関連ファイル...

docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。

問題点: docker run に -v パラメータを追加すると、コンテナは常に再起動状態になります...

MySQLリモート接続権限の詳細な説明

1. MySQLデータベースにログインするmysql -u ルート -pユーザーテーブルを表示する ...

エンコードが utf-8 に設定されている場合に Web ページが文字化けする問題の解決策

最近、PHP で Web ページを書いているときに、エンコードを UTF-8 に設定しました。しかし...

レイアウトサイズを変更するために左右にドラッグする純粋なCSS

ブラウザの非overflow:auto要素resize伸縮機能を利用して、JavaScript を使...

インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する

1. インデックスの役割一般的に言えば、インデックスは本の目次に相当します。条件に基づいてクエリを実...

Vue プロジェクトでのスキャンコード決済の実装例 (デモ付き)

目次需要背景思考分析UI 表示始める1. 支払いコンポーネントテンプレートを作成する2. 支払いコン...

Vueは動的クエリルール生成コンポーネントを実装します

1. 動的クエリルール動的クエリルールは、おおよそ次の図のようになります。ユーザのカスタマイズに応じ...

ページネーションの例とベストプラクティス

<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...

フロントエンド開発における一般的なテクニックのまとめ

1. 記事タイトルリストの右側に日付を表​​示する方法:コードをコピーコードは次のとおりです。 &l...

MySQL 5.7 以降のバージョンのダウンロードとインストールのグラフィック チュートリアル

1. ダウンロード1. MySQL公式サイトのダウンロードアドレス: https://downloa...

json.stringify() と json.parse() の違いと使い方

1. JSON.stringify() と JSON.parse() の違い私たちは皆、JSON.s...

CSS3 で @media を使用して Web ページの適応を実現するためのサンプル コード

現在、コンピュータモニターの画面解像度はますます高くなる傾向にありますが、携帯電話などのモバイルデバ...

MySQLにおける正規表現の一般的な使用法

MySQL における Regexp の一般的な使用法特定の文字列を含むあいまい一致# コンテンツフィ...