유닉스 타임 스탬프는 int 열에 어떻게 저장되어야합니까?
통계적 이유로 수백만 건의 쓰기를 포함 할 로깅 테이블이 있습니다. 모든 열은 int 외래 키입니다. 또한 각 행에 타임 스탬프 열을 추가 할 것입니다. DATETIME이 8 비트를 사용한다는 점을 감안할 때 int(10) unsigned
저장 공간 (및 해당 열의 인덱스)을 절반으로 줄이는 데 사용할 것 입니다.
그러나이 칼럼이 언제 더 이상 작동하지 않을지 궁금합니다. 2038 년 1 월 19 일 오전 3시 14 분 7 초에 UNIX 타임 스탬프의 경우 9,999,999,999 값이 문제가됩니다.하지만 MySQL의 unsigned int는 최대 4,294,967,295 개만 보유하고 타임 스탬프 4294967295는 내 PHP 응용 프로그램에서 잘못된 숫자를 표시합니다.
이것은 무엇을 의미합니까? MySQL에 int 타임 스탬프를 저장하는 것이 9999999999까지 끝날 수 없기 때문에 2021 년에 끝날 것입니까?
대답:
- 2147483647은 2038 (9999999999 아님)이므로 문제가 없습니다.
unsigned
2147483647이 서명 된 MySQL int에 적합하기 때문에 필요하지 않습니다.
표준 UNIX 타임 스탬프는 부호있는 32 비트 정수이며 MySQL에서는 일반 "int"열입니다. 9,999,999,999를 저장할 수있는 방법은 없습니다. 이것이 표현 범위를 벗어난 길이이기 때문입니다. 어떤 종류의 32 비트 정수도 가장 높은 값은 4,294,967,295입니다. 부호있는 32 비트 입력의 최고 값은 2,147,483,647입니다.
UNIX 타임 스탬프가 64 비트 데이터 유형으로 변경되면 MySQL "bigint"를 사용하여 저장해야합니다.
의 int(10)
경우 (10)
부분은 단지 표시 목적입니다. MySQL은 여전히 내부적으로 전체 32 비트를 사용하여 번호를 저장하지만 테이블에서 선택할 때마다 10 만 표시합니다.
참고 URL : https://stackoverflow.com/questions/4289793/how-should-unix-timestamps-be-stored-in-int-columns
'Development Tip' 카테고리의 다른 글
php_network_getaddresses : getaddrinfo 실패 : 이름 또는 서비스를 알 수 없음 (0) | 2020.12.08 |
---|---|
dict에 대한 키로서의 Python 변수 (0) | 2020.12.08 |
줄의 시작과 끝을위한 Grep? (0) | 2020.12.08 |
Vim에서 키 조합의 기능을 확인하는 방법 (0) | 2020.12.08 |
원형 imageView Android에 그림자와 테두리를 추가하는 방법은 무엇입니까? (0) | 2020.12.08 |