Date & Time Types

날짜/시간 타입은 “시간대가 필요한가”까지 보고 골라야 합니다.

이름이 비슷해도 DBMS마다 의미가 다릅니다. 특히 Oracle의 DATE, MySQL의 TIMESTAMP, PostgreSQL의 TIMESTAMPTZ는 그대로 대응되지 않습니다.

결정 순서: 날짜만 → 시간 포함 → 시간대 포함

글로벌 서비스, 로그, 예약 시각처럼 시간대 해석이 중요한 값은 단순 날짜+시간 타입으로 끝내면 안 됩니다.

1 날짜만 필요한가?

생일, 회계 기준일처럼 시각이 중요하지 않으면 날짜 타입을 봅니다.

2 시각과 정밀도가 필요한가?

생성일시, 수정일시, 로그처럼 초 또는 소수 초가 필요하면 시간 포함 타입을 씁니다.

3 시간대 변환이 필요한가?

사용자 지역이나 UTC 기준이 중요하면 시간대 인식 타입을 선택합니다.

Oracle

DATE에도 시·분·초가 들어갑니다.

날짜+초

DATE는 날짜만이 아니라 시간까지 포함합니다.

정밀 시각

TIMESTAMP는 소수 초 정밀도를 더합니다.

시간대

TIMESTAMP WITH TIME ZONE으로 시간대 정보를 함께 다룹니다.

MySQL

DATETIME과 TIMESTAMP의 변환 규칙이 다릅니다.

날짜만

DATE는 달력 날짜만 저장합니다.

그대로 저장

DATETIME은 입력한 날짜+시간을 시간대 변환 없이 저장합니다.

UTC 변환

TIMESTAMP는 저장/조회 시 세션 시간대 변환이 개입합니다.

PostgreSQL

TIMESTAMP와 TIMESTAMPTZ를 구분합니다.

날짜만

DATE는 날짜만 저장합니다.

시간대 없음

TIMESTAMP는 시간대 없는 날짜+시간입니다.

시간대 인식

TIMESTAMPTZ는 원래 시간대 이름을 보존하기보다 같은 시점으로 정규화하고 세션 시간대로 표시합니다.

실무 감각: “사용자가 본 현지 시각”을 보존할지, “전 세계에서 같은 순간”을 기록할지 먼저 정해야 합니다. MySQL TIMESTAMP처럼 범위와 변환 규칙이 있는 타입은 운영 기준 연도와 시간대 정책까지 함께 확인합니다.