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
MySQL timestamp 와 Y2K38 Problem
안녕하세요. 핀다 DBA로 근무하고 있는 정현호 라고 합니다. 이번 글은 Unix TimeStamp와 MySQL의 날짜 컬럼에 관한 내용을 정리해보았습니다.
medium.com
MySQL :: MySQL 8.4 Reference Manual :: 13.2.2 The DATE, DATETIME, and TIMESTAMP Types
13.2.2 The DATE, DATETIME, and TIMESTAMP Types The DATE, DATETIME, and TIMESTAMP types are related. This section describes their characteristics, how they are similar, and how they differ. MySQL recognizes DATE, DATETIME, and TIMESTAMP values in several f
dev.mysql.com
'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 |