mysql이 5.6.4로 업데이트된 후, 시간의 밀리초 값을 기록할 수 있는 Factual Seconds라는 새로운 기능이 추가되었습니다. 하지만 현재 데이터베이스에서는 밀리초 값을 기록하지 않기 때문에 밀리초가 500을 초과하면 자바에서는 시간이 반올림되는 문제가 있습니다.
다음은 시간이 어떻게 전달되는지 보여주는 예입니다. 먼저 테이블을 만듭니다.
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이며, 이는 소수점 이하 자릿수가 유지되어야 함을 의미합니다. 분명히 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 쿼리에서 다시 select *를 수행하면 다음 결과를 볼 수 있습니다.
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의 밀리초 값은 반올림됩니다.
이러한 오류를 방지하는 두 가지 방법이 있음을 알 수 있습니다.
1. 필드를 정의할 때 datetime(6) 또는 timestamp(6)를 사용합니다.
2. 필드를 정의할 때는 시간 이전에 정의합니다. 데이터베이스에 저장되면 밀리초 값을 잘라야 합니다.
추천 관련 기사 및 튜토리얼: mysql 튜토리얼
위 내용은 mysql의 시간 캐리 문제에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!