sourcecode

int 열에 UNIX 타임스탬프를 저장하는 방법을 선택하십시오.

copyscript 2022. 9. 26. 21:57
반응형

int 열에 UNIX 타임스탬프를 저장하는 방법을 선택하십시오.

로그 테이블에는 통계상의 이유로 수백만 건의 쓰기가 포함되어 있습니다.모든 열이 외부 키에 있습니다.각 행에 타임스탬프 열도 추가합니다.DATETIME이 8비트를 가져간다는 것을 고려하면, 나는 그것을 사용할 것이다.int(10) unsigned저장 공간(및 해당 열의 인덱스)을 반으로 잘라냅니다.

하지만 이 칼럼이 언제 더 이상 작동하지 않는지 궁금해요.3시 14분 7초2038년 1월 19일 오전에는 UNIX 타임스탬프 값 9,999,999가 문제가 됩니다.그러나 MySQL의 부호 없는 int는 최대 4,294,967,295까지만 유지되며 타임스탬프 4294967295는 내 PHP 어플리케이션에서 비활성 번호가 표시됩니다.

그럼 이게 무슨 뜻일까요?MySQL에 저장된 int 타임스탬프는 2021년쯤에 종료될 예정입니까? 9999999999에 도달할 수 없기 때문입니다.

답변:

  1. 2147483647은 2038(9999999가 아님)이므로 문제가 없습니다.
  2. unsigned2147483647은 서명된 MySQL int에 적합하므로 필요하지 않습니다.

표준 UNIX 타임스탬프는 부호 있는 32비트 정수이며 MySQL에서는 일반 "int" 열입니다.999,999,999를 저장할 수 있는 방법은 없습니다.이는 표현 범위를 훨씬 벗어나기 때문입니다.어떤 종류의 32비트 int도 최대 4,294,967,295입니다.부호화된 최대 32비트는 2,147,483,647입니다.

UNIX 타임스탬프가 64비트 데이터 유형으로 이동하는 경우 MySQL "bigint"를 사용하여 타임스탬프를 저장해야 합니다.

에 대해서는int(10),그(10)part는 단순히 표시용입니다.MySQL은 숫자를 저장하기 위해 전체 32비트를 계속 사용하지만 테이블에서 선택을 수행할 때마다 10만 표시합니다.

언급URL : https://stackoverflow.com/questions/4289793/how-should-unix-timestamps-be-stored-in-int-columns

반응형