mysql が 5.6.4 に更新された後、機能秒と呼ばれる新しい機能が追加されました。これは、時間のミリ秒値を記録できます。ただし、現在のデータベースにはミリ秒の値が記録されていないため、ミリ秒が 500 を超えると Java の時間が丸められてしまうという問題が発生します。
次は、時間がどのように伝わるかを示す例です。まずテーブルを作成します:
CREATE TABLE test_time ( time_sec datetime, time_millis datetime(3), time_micros datetime(6), stamp_sec timestamp, stamp_millis timestamp(3), stamp_micros timestamp(6) );
友人の中には、日付時刻とタイムスタンプを精度で定義できることを知らない人もいるかもしれません。精度の値は 0 ~ 6 で、小数点以下の桁数が保持されることを意味します。デフォルト値は 0 です。明らかに、3 ビットを保持することはミリ秒の精度とみなすことができ、6 ビットを保持することはマイクロ秒の精度とみなすことができます。
(推奨されるオンライン学習ビデオ チュートリアル: mysql ビデオ チュートリアル)
次に、レコードを挿入します:
INSERT INTO test_time ( time_sec, time_millis, time_micros, stamp_sec, stamp_millis, stamp_micros ) VALUES( '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' );
次に、もう一度選択を行います。 * test_time クエリから、次の結果がわかります。
time_sec |time_millis |time_micros |stamp_sec |stamp_millis |stamp_micros | ---------------------|-----------------------|--------------------------|---------------------|-----------------------|--------------------------| 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 つの方法があることがわかります:
1. フィールドを定義するときに datetime(6) または timestamp(6) を使用します;
2.フィールドを定義するときの精度はありませんが、時間をデータベースに保存する前にミリ秒値を切り捨てる必要があります。
おすすめの関連記事とチュートリアル: mysql チュートリアル
以上がmysqlのタイムキャリー問題の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。