A Brief Analysis on the Time Carrying Problem of MySQL

A Brief Analysis on the Time Carrying Problem of MySQL

The default time type (datetime and timestamp) in MySQL has a precision of seconds. If the time value is set with a precision less than a second, it will be rounded off, which may cause the value in the database to be one second more than the original value. In other words, records that originally belonged to today may be recorded tomorrow.

Below is an example that demonstrates how time is rounded. First create a table:

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)
);

Some readers may not know that datetime and timestamp can be defined with precision. The precision value is 0~6, indicating how many decimal places are retained. The default value is 0. Obviously, retaining 3 digits can be regarded as milliseconds precision, and retaining 6 digits can be regarded as microseconds precision.

Then we insert a record:

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'
);

Then do another select * from test_time query and you will see the following results:

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|

You can see that the second values ​​of time_sec and stamp_sec in the database are rounded up, and the millisecond values ​​of time_millis and stamp_millis are rounded up.

It can be seen that there are two ways to avoid such errors:

  • Use datetime(6) or timestamp(6) when defining fields;
  • The field is defined without precision, but the millisecond value is truncated before the time is stored in the database.

Related Documents:

MySQL 5.6 Reference: Fractional Seconds in Time Values

Summarize

The above is the full content of this article. I hope that the content of this article will have certain reference learning value for your study or work. Thank you for your support of 123WORDPRESS.COM.

You may also be interested in:
  • Summary of MySQL date data type and time type usage
  • Detailed explanation of TIMESTAMP usage in MySQL
  • MySql query time period method
  • MySQL date and time format conversion implementation statement
  • mysql calculate time difference function
  • FROM_UNIXTIME Format MYSQL timestamp function
  • Mysql date time DATE_FORMAT (date, format)
  • Functions and methods for converting dates and timestamps in MySQL
  • How to write various SQL statements in MySQL to get time data for one day, one week, and one month
  • MySQL timestamp automatic update time sharing

<<:  Example of Vue's implementation of the underlying code for simulating responsive principles

>>:  How to solve the Docker container startup failure

Recommend

Detailed example of clearing tablespace fragmentation in MySQL

Detailed example of clearing tablespace fragmenta...

MySQL 5.7 generated column usage example analysis

This article uses examples to illustrate the usag...

A useful mobile scrolling plugin BetterScroll

Table of contents Make scrolling smoother BetterS...

What to do after installing Ubuntu 20.04 (beginner's guide)

Ubuntu 20.04 has been released, bringing many new...

How to use crontab to add scheduled tasks in Linux

Preface The Linux system is controlled by the sys...

A summary of detailed insights on how to import CSS

The development history of CSS will not be introd...

Detailed explanation of the update command for software (library) under Linux

When installing packages on an Ubuntu server, you...

Detailed tutorial on running selenium+chromedriver on the server

1. Introduction I want to use selenium to scrape ...

How to create a web wireframe using Photoshop

This post introduces a set of free Photoshop wire...

Vue integrates Tencent TIM instant messaging

This article mainly introduces how to integrate T...

Implementation of Vue3 style CSS variable injection

Table of contents summary Basic Example motivatio...

A Deeper Look at the Differences Between Link and @import

There are three main ways to use CSS in a page: ad...

JavaScript Prototype Details

Table of contents 1. Overview 1.1 What is a proto...