Development Tip

밀리 초 정밀도의 타임 스탬프 : MySQL에 저장하는 방법

yourdevel 2020. 11. 11. 20:44
반응형

밀리 초 정밀도의 타임 스탬프 : MySQL에 저장하는 방법


MySQL을 사용하여 애플리케이션을 개발해야하고 타임 스탬프를 나타내는 "1412792828893"과 같은 값을 밀리 초의 정밀도로 저장해야합니다. 즉, 1.1.1970 이후의 밀리 초입니다. 나는 행을 선언 timestamp하지만 불행히도 이것은 작동하지 않았습니다. 모든 값이0000-00-00 00:00:00

CREATE TABLE IF NOT EXISTS `probability` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`segment_id` int(11) NOT NULL,
`probability` float NOT NULL,
`measured_at` timestamp NOT NULL,
`provider_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ;

이 정밀도로 타임 스탬프 값을 저장할 수 있으려면 어떻게 선언해야합니까?


분수 초 시간 데이터 유형으로 열을 선언하려면 MySQL 버전 5.6.4 이상이어야합니다. 올바른 버전인지 확실하지 않습니까? 시도해보십시오 SELECT NOW(3). 오류가 발생하면 올바른 버전이없는 것입니다.

예를 들어 DATETIME(3)는 타임 스탬프에서 밀리 초 해상도를 TIMESTAMP(6)제공하고 * nix 스타일 타임 스탬프에서 마이크로 초 해상도를 제공합니다.

이것을 읽으십시오 : https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html

NOW(3) 밀리 초 단위로 MySQL 서버의 운영 체제에서 현재 시간을 제공합니다.

Unix epoch 이후 몇 밀리 초가 지난 경우 DATETIME (3) 값을 얻으려면 이것을 시도하십시오.

FROM_UNIXTIME(ms * 0.001)

예를 들어 자바 스크립트 타임 스탬프Unix epoch 이후 밀리 초 단위로 표시됩니다 .

(와 같은 MySQL 내부 분수 산술 * 0.001은 항상 IEEE754 배정 밀도 부동 소수점으로 처리되므로 태양이 백색 왜성이되기 전에 정밀도를 잃지 않을 가능성이 높습니다.)

이전 버전의 MySQL을 사용하고 있고 1 초 미만의 정밀도가 필요한 경우 가장 좋은 방법은 업그레이드하는 것입니다. 다른 것은 당신이 지저분한 해결 방법을하도록 강요 할 것입니다.

어떤 이유로 업그레이드 할 수없는 경우 BIGINT또는 DOUBLE열을 사용하여 Javascript 타임 스탬프를 숫자처럼 저장하는 것을 고려할 수 있습니다. FROM_UNIXTIME(col * 0.001)여전히 정상적으로 작동합니다. 이러한 열에 저장할 현재 시간이 필요하면 다음을 사용할 수 있습니다.UNIX_TIMESTAMP() * 1000

참고 URL : https://stackoverflow.com/questions/26299149/timestamp-with-a-millisecond-precision-how-to-save-them-in-mysql

반응형