MySQL 테이블을 작성 중 '작성일', '수정일' 컬럼의 타입을 지정해야했는데, 찾아보니 날짜 형식을 지정하는 3가지 방법이 있었다. 각각 어떤 차이점이 있는지 정리해보려한다.
DATE
DATE는 '연-월-일' 만 저장하고 시간을 저장하지 않는다.
형식: 'YYYY-MM-DD'
범위: '1000-01-01' ~ '9999-12-31'
실행 예시:
CREATE TABLE time(
date DATE,
);
INSERT INTO time (date) value (now()); //시스템 시간 저장
SELECT date FROM time;
DATETIME, TIMESTAMP
DATETIME과 TIMESTAMP는 '연-월-일'뿐만 아니라 '시간'도 함께 저장한다.
다만, TIMESTAMP는 UTC 시간이 저장되고 DB의 time_zone 시스템 변수의 영향을 받는다.
따라서 MySQL 서버의 시간대 설정에 따라 TIMESTAMP 값이 다르게 해석될 수 있다.
데이터가 여러 나라에서 사용되는 경우라면 TIMESTAMP를 사용하는 것이 좋을 수도 있겠다.
형식: 'YYYY-MM-DD hh:mm:ss'
범위: (DATETIME) '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'
(TIMESTAMP) '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC
(MySQL 8.0.28 버전에서 3001-01-18 23:59:59까지 날짜 표현이 가능하도록 개선 되었다고 함.
자세한 내용은 'Y2K38' 검색)
실행 예시:
CREATE TABLE time(
dateTime DATETIME,
timeStamp TIMESTAMP
);
INSERT INTO time (dateTime, timeStamp) value (now(), now()); //서버 시간 저장
참고자료:
https://dev.mysql.com/doc/refman/8.4/en/datetime.html
https://medium.com/finda-tech/mysql-timestamp-%EC%99%80-y2k38-problem-d43b8f119ce5
'TIL > DB' 카테고리의 다른 글
[TIL] MySQL 출력할 행의 개수 제한하기 - LIMIT, OFFSET (0) | 2024.12.10 |
---|---|
[TIL] 집계 함수 (COUNT,SUM,AVG...) + LIMIT, DISTINCT (0) | 2024.12.05 |
[TIL] 릴레이션의 KEY (0) | 2024.12.04 |