날짜/시간 타입 해석법
타입 이름보다 먼저 볼 것은 저장 범위와 시간대 처리입니다.
같은 날짜/시간처럼 보여도 DBMS마다 “날짜만 저장하는지”, “시간까지 담는지”, “저장·조회 때 시간대 변환이 개입하는지”가 다릅니다.
Oracle
DATE가 이미 시간까지 포함하고, TIMESTAMP는 정밀도를 늘리는 쪽에 가깝습니다.
MySQL
DATETIME은 그대로 저장하고, TIMESTAMP는 UTC 변환이 들어갑니다.
PostgreSQL
TIMESTAMP와 TIMESTAMPTZ를 분리해 시간대 유무를 명확히 구분합니다.
질문 1
DATE가 담는 범위
날짜 전용인지 먼저 확인
DATE
'2024-06-15 14:30:00'
이름은 DATE지만 실제 저장값에는 시·분·초가 포함됩니다.
DATE
'2024-06-15'
달력 날짜만 저장합니다. 시간은 별도 타입으로 분리됩니다.
DATE
'2024-06-15'
MySQL과 비슷하게 날짜만 저장하는 순수 날짜 타입입니다.
질문 2
시간까지 필요할 때
정밀도와 저장 규칙 구분
TIMESTAMP
'2024-06-15 14:30:00.123456'
핵심 차이는 시간 포함 여부가 아니라 소수 초까지 기록하는 정밀도입니다.
DATETIME / TIMESTAMP
'2024-06-15 14:30:00'
표현은 비슷해도 DATETIME은 그대로, TIMESTAMP는 변환 규칙을 가집니다.
TIMESTAMP
'2024-06-15 14:30:00'
시간대 정보 없이 날짜+시간만 저장하는 기본 시각 타입입니다.
질문 3
시간대가 개입하는가
글로벌 운영에서 가장 중요
TIMESTAMP WITH TIME ZONE
'2024-06-15 14:30:00 +09:00'
값에 시간대 정보가 함께 들어가므로 어떤 지역의 시각인지 명시할 수 있습니다.
TIMESTAMP
14:30 KST → 05:30 UTC
저장 시 UTC로 바꾸고, 조회 시 세션 시간대로 다시 보여줍니다.
TIMESTAMPTZ
'2024-06-15 14:30:00+09'
시간대를 인식하며, 내부 기준은 통일하고 표시 시 세션 시간대가 반영됩니다.
선택 순서
이 세 질문이면 대부분 빠르게 결정됩니다.
Oracle: DATE로도 시간이 저장되므로, 정밀도가 필요한지부터 판단합니다.
MySQL: 날짜+시간이 필요해도 시간대 변환이 필요 없으면 DATETIME, 필요하면 TIMESTAMP를 봅니다.
PostgreSQL: TIMESTAMP와 TIMESTAMPTZ를 시간대 유무 기준으로 나눠 읽으면 헷갈림이 줄어듭니다.