[DB] time, timestamp, date, datetime
최근에 erd 설계를 (오랜만에) 하게 되면서 createdAt, updatedAt에 쓰이는 type에 관해 고민이 생겼다.
지금껏 datetime으로 해놨었는데, datetime 외에도 timestamp와 같이 시간을 기록할 수 있는 컬럼에 관해 표현할 수 있는 type은 다양하다.
오늘은 시간 관련 type에 대해 알아보고, 이를 적재적소 어떻게 쓰는지 알아볼 예정이다!
TIME
time 타입은 HH:MM:SS로 시간에 대한 정보를 담는 타입이다.
time이 가질 수 있는 값의 범위는 -838:59:59 ~ 838:59:59이다.
여기서 시간은 날짜 중에 day의 값을 표현할 수 있는 범위까지이기에 838시간이라는 큰 시간까지 포함이 가능하다.
TIMESTAMP
timestamp 타입은 날짜, 시간 모두 포함한 타입이다.
범위로는 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 UTC까지 표현할 수 있다.
DATE
date 타입은 날짜는 포함하지만 시간은 포함하지 않을 때 사용하는 타입이다.
YYYY-MM-DD 형식으로 입력이 가능하며, '1000-01-01'부터 '9999-12-31'까지만 입력 가능하다.
DATETIME 타입
datetime 타입은 날짜와 시간 모두 포함할 때 사용하는 타입이다.
YYYY-MM-DD HH:MM:SS 형식으로 '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지 입력 가능하다.
TIMESTAMP vs DATETIME
1. 타입
TIMESTAMP는 숫자형, DATETIME은 문자형이다
2. 용량
TIMESTAMP는 4byte, DATETIME은 8byte이다.
3. 입력
TIMESTAMP는 데이터값을 입력해주지 않고 저장시 자동으로 현재 날짜가 입력된다. (Default Insert (AUTO))
DATETIME은 데이터값을 입력해주어야만 날짜가 입력된다. (명시적 INSERT)
TIMESTAMP의 경우 Timezone을 적용해서 보여준다.
Timezone
타임존은 동일한 로컬 시간을 따르는 지역을 의미하며, 해당 국가에 의해 법적으로 지정된다.
DATE와 DATETIME의 경우 범위가 거의 같지만 TIMESTAMP의 경우 다르기에 사용할 때 목적에 따라 명확히 구분해서 사용해야한다!