-
Notifications
You must be signed in to change notification settings - Fork 0
[01. 의사 결정 문서] MySQL timestamp vs datetime 선택
YH.LEE edited this page Jul 17, 2023
·
3 revisions
- MySQL 에서 제공하는 날짜+시간 형식의 타입은 timestamp, datatime 두 가지가 있다.
- 글로벌 서비스에서는 어떻게 시간을 timezone 별로 표현할 수 있을까?
- CREATE : UTC 기준으로 변환해서 저장한다.
- READ : 어떻게 다시 USER 가 살고있는 timezone 으로 변경할 까?
- 프로젝트 요구사항 : 글로벌 회원의 접속으로 인한 글로벌 타임존 셋팅 필요
- timestamp 타입 사용
- UTC 로 변환해서 저장한다. User Request 의 timezone 을 별도 컬럼에 저장한다.
- timezone 정보를 토대로 원래 시간대로 계산해서 내보낸다.
- datetime 타입 사용
데이터 범위 제약으로 timestamp가 아닌 datetime 타입을 선택하였습니다.
- 지속 가능한 서비스 제공
- datetime 타입을 사용하면 DB 서버의 시스템 타임존 변경에도 영향을 받지 않는다.
단점
- 2038년까지만 표현 가능
- 시스템 타임존 셋팅이 변경되면 영향을 받는다
장점
- 데이터 저장 시 서버시간을 UTC 시간으로 저장 후, 꺼낼때 시스템의 timezone 시간에 맞춰서 변환한다.
- 저장 자료형이 숫자여서 시간 연산에 용이하다
단점
- 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');
-
[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)