생일, 회계 기준일처럼 시각이 중요하지 않으면 날짜 타입을 봅니다.
이름이 비슷해도 DBMS마다 의미가 다릅니다. 특히 Oracle의
DATE, MySQL의 TIMESTAMP, PostgreSQL의
TIMESTAMPTZ는 그대로 대응되지 않습니다.
글로벌 서비스, 로그, 예약 시각처럼 시간대 해석이 중요한 값은 단순 날짜+시간 타입으로 끝내면 안 됩니다.
생일, 회계 기준일처럼 시각이 중요하지 않으면 날짜 타입을 봅니다.
생성일시, 수정일시, 로그처럼 초 또는 소수 초가 필요하면 시간 포함 타입을 씁니다.
사용자 지역이나 UTC 기준이 중요하면 시간대 인식 타입을 선택합니다.
DATE에도 시·분·초가 들어갑니다.
DATE는 날짜만이 아니라 시간까지 포함합니다.
TIMESTAMP는 소수 초 정밀도를 더합니다.
TIMESTAMP WITH TIME ZONE으로 시간대 정보를 함께
다룹니다.
DATETIME과 TIMESTAMP의 변환 규칙이
다릅니다.
DATE는 달력 날짜만 저장합니다.
DATETIME은 입력한 날짜+시간을 시간대 변환 없이
저장합니다.
TIMESTAMP는 저장/조회 시 세션 시간대 변환이
개입합니다.
TIMESTAMP와 TIMESTAMPTZ를 구분합니다.
DATE는 날짜만 저장합니다.
TIMESTAMP는 시간대 없는 날짜+시간입니다.
TIMESTAMPTZ는 원래 시간대 이름을 보존하기보다 같은
시점으로 정규화하고 세션 시간대로 표시합니다.
실무 감각: “사용자가 본 현지 시각”을 보존할지, “전
세계에서 같은 순간”을 기록할지 먼저 정해야 합니다. MySQL
TIMESTAMP처럼 범위와 변환 규칙이 있는 타입은 운영 기준
연도와 시간대 정책까지 함께 확인합니다.