Skip to content

[01. 의사 결정 문서] MySQL timestamp vs datetime 선택

YH.LEE edited this page Jul 17, 2023 · 3 revisions

[MySQL 날짜,시간 타입 선택]

Context and Problem Statement

  • MySQL 에서 제공하는 날짜+시간 형식의 타입은 timestamp, datatime 두 가지가 있다.
  • 글로벌 서비스에서는 어떻게 시간을 timezone 별로 표현할 수 있을까?
    • CREATE : UTC 기준으로 변환해서 저장한다.
    • READ : 어떻게 다시 USER 가 살고있는 timezone 으로 변경할 까?

Decision Drivers

  • 프로젝트 요구사항 : 글로벌 회원의 접속으로 인한 글로벌 타임존 셋팅 필요

Considered Options

  1. timestamp 타입 사용
    1. UTC 로 변환해서 저장한다. User Request 의 timezone 을 별도 컬럼에 저장한다.
    2. timezone 정보를 토대로 원래 시간대로 계산해서 내보낸다.
  2. datetime 타입 사용

Decision Outcome

데이터 범위 제약으로 timestamp가 아닌 datetime 타입을 선택하였습니다.


Positive Consequences

  • 지속 가능한 서비스 제공
  • datetime 타입을 사용하면 DB 서버의 시스템 타임존 변경에도 영향을 받지 않는다.

Pros and Cons of the Options

timestamp 타입

단점

  • 2038년까지만 표현 가능
  • 시스템 타임존 셋팅이 변경되면 영향을 받는다

장점

  • 데이터 저장 시 서버시간을 UTC 시간으로 저장 후, 꺼낼때 시스템의 timezone 시간에 맞춰서 변환한다.
  • 저장 자료형이 숫자여서 시간 연산에 용이하다

datetime 타입

단점

  • 9999년 까지 표현 가능
  • 코드 레벨에서 UTC 변환해야 한다. 즉, 잘못짠 코드로 인한 변환 오류 가능성 존재한다.
  • 문자형이라 시간 연산에 제약이 있음

장점

  • UTC 기준으로 변환 기능 제공함
    • mysql 8.0.19버전 이후 부터 DATETIME, DATETIME 에 timezone 설정 가능

      INSERT INTO ts (col) VALUES ('2020-01-01 10:10:10'),
          ('2020-01-01 10:10:10+05:30'), ('2020-01-01 10:10:10-08:00');

Link

[MySQL :: MySQL 8.0 Reference Manual :: 11.2.2 The DATE, DATETIME, and TIMESTAMP Types](https://dev.mysql.com/doc/refman/8.0/en/datetime.html)