programing

MySQL의 TIMESTAMP 사용 대 직접 타임스탬프 저장

yellowcard 2023. 7. 24. 22:23
반응형

MySQL의 TIMESTAMP 사용 대 직접 타임스탬프 저장

날짜와 시간 값을 MySQL의 TIMESTAMP 형식으로 저장하는 것과 사용자 지정 UNSIGNED INT 형식으로 저장하는 것에 대해 딜레마에 빠져 있습니다.여기서 주요 고려 사항은 검색 속도, PHP의 적절한 범위 계산 및 때때로 사람이 읽을 수 있는 값으로 포맷하는 것입니다.

각 유형 및 해당 범위에 필요한 스토리지 공간:

DATETIME        8 bytes  '1000-01-01 00:00:00' to '9999-12-31 23:59:59'
TIMESTAMP       4 bytes  '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
UNSIGNED INT    4 bytes  (Maximum Value 4294967295)

저는 DATTIME의 범위가 전혀 필요하지 않습니다.타임스탬프와 서명되지 않은 INT 사이에서 고민하고 있습니다.

서명되지 않은 INT에 찬성하는 주장:

  • 4294967295의 UNIX 타임스탬프는 TIMESTAMP보다 크고 충분히 좋은 일요일, 2월 7일 06:28:15 GMT로 변환됩니다.
  • 이러한 타임스탬프를 PHP에서 직접 비교하는 것이 TIMESTAMP를 strtime()을 통해 변환한 다음 비교하는 것보다 더 빠를 것입니다.

타임스탬프가 제공하는 유일한 이점은 mysql 테이블에서 값을 수동으로 읽을 때 값을 '확인'해야 한다는 것입니다.

서명되지 않은 INT가 아닌 TIMESTAMP를 사용해야 하는 강력한 이유가 있습니까?

TIMESTAMP 인수

  • UTC 시간대에 데이터를 암묵적으로 저장합니다.세션 시간대가 무엇이든 상관 없습니다.다른 표준 시간대를 사용해야 하는 경우 유용합니다.
  • 다음을 사용하여 자동 타임스탬프 열을 설정할 수 있습니다.DEFAULT CURRENT_TIMESTAMP또는ON UPDATE CURRENT_TIMESTAMP(MySQL 5.6.5까지만 표당 열 하나)
  • 날짜 비교, 추가, 감산, 범위 조회 등을 위해 날짜 시간 함수를 사용할 수 있습니다.FROM_UNIXTIME()함수 - 인덱스를 사용할 수 있는 쿼리를 더 쉽게 작성할 수 있습니다.
  • PHP에서

    >> date('Y-m-d h:i:s',4294967295);
    '1969-12-31 11:59:59'
    

    그래서 범위는 사실 같습니다.

    • UNIX_TIMestamp() 함수 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp 를 사용하여 추가 오버헤드 없이 정수 유닉스 타임스탬프를 검색할 수 있습니다.

UNIX_TIMESTAMP()가 TIMESTAMP 열에서 사용되는 경우 함수는 암묵적인 "string-to-Unix-timestamp" 변환 없이 내부 타임스탬프 값을 직접 반환합니다.

TIMESTAMP의 유일한 실제 사용 방법은 행이 업데이트될 때(해당 필드의 기본 동작) 해당 필드를 자동으로 업데이트하거나 데이터 스토리지 요구 사항이 너무 엄격하여 행당 4바이트가 실제로 영향을 미치는 경우입니다.

실제로 DATTIME과 UNSIGNED INT를 비교해야 하는데, 다음과 같은 이유로 DATTIME을 추천합니다.

  • MySQL의 기본 날짜/시간 함수를 사용하여 날짜 범위 등으로 선택할 수 있습니다.
  • PHP: PHP: PHP의 UNIX 할 수 UNIX 타임스탬프로 은 매우 .SELECT UNIX_TIMESTAMP(field) FROM table하고 strtime을 가 없습니다. strtime str to time을 사용합니다.
  • 지적한 대로 데이터베이스의 필드를 직접 읽고 편집하는 것이 더 쉽습니다.
  • 날짜 범위에 제한 없음

제 생각에 두 번째 점만 봐도 정수로 저장해야 할 이유가 전혀 없습니다.

이것은 "과학적인" 대답은 아닐 수도 있지만, 저는 항상 MySql이 변환, 산술, 비교 등을 처리하는 방식을 찾습니다.TIMESTAMP 열에 혼란이 있습니다.서명되지 않은 INT 열은 훨씬 더 직접적이며 항상 무엇을 기대해야 하는지 알고 있습니다.

추신. TIMESTAMP 칼럼의 또 다른 장점은 각 업데이트나 삽입 후 자동으로 현재 시간으로 설정할 수 있다는 것입니다. 하지만 그것은 당신이 없이는 살 수 없는 것이 아닙니다.

항상 그렇듯이 저장해야 하는 항목에 따라 다릅니다.
예를 들어 일부 API에서 데이터를 사용하는 경우 시간(초, 시장 데이터에서 일반적으로 사용되는 시간)을 숫자(초)로 전송하면 데이터를 삽입하기 전에 매번 문자열로 변환하는 대신 서명되지 않은 int로 저장하는 것이 더 쉽고 빨라질 수 있습니다.

언급URL : https://stackoverflow.com/questions/7029127/using-mysqls-timestamp-vs-storing-timestamps-directly

반응형