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コンテナの起動失敗を解決する方法

推薦する

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

Python の MySQL データベース LIKE 演算子の詳細な説明

LIKE 演算子は、列内の指定されたパターンを検索するため、WHERE 句で使用されます。文法: 列...

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

ライフゲームの JavaScript 実装

目次コンセプト紹介論理的ルール完全なコード主な実装コンセプト紹介セルオートマトンとは、コンピュータの...

Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

結論:マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) ...

MACでMYSQLデータベースのパスワードを忘れた場合の解決策

Mac オペレーティングシステムで MYSQL データベースのパスワードを忘れた場合の簡単な解決策1...

Linux システムの仮想ホストで Swoole Loader 拡張機能を有効にする方法

特記事項: Swoole 拡張機能のみがインストールされ、サーバーはホストにインストールされません。...

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...

MySQL の隠し列の詳細表示

目次1. 主キーが存在する2. 主キーはないが、一意のインデックスが存在する3. 共同主キーまたは共...

MySQLのロングトランザクションに関する深い理解

序文:この記事では主にMySQLのロングトランザクションに関する内容を紹介します。例えば、トランザク...

CSSアニメーションに基づくSVGボタンのサンプルコード

具体的なコードは次のとおりです。 <a href="#"> <...

MySQL トランザクション分離レベルの詳細

serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...

mysql 8.0.16 winx64 および Linux でルート ユーザーのパスワードを変更する方法

データベースへの接続などの基本的な操作はご自身で行ってください。この記事ではパスワードの変更方法を中...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...