-
[MySQL] Timestamp 타입과 Datetime 타입의 차이 🕰데이터베이스/MySQL 2022. 8. 14. 21:03
이 포스팅을 하게 된 이유는 업무 중 우연히 어떤 에러를 발견했기 때문이었다. 당시 데이터 만료 기간을 설정하는 중이었고 특정 조건에서는 만료 기간을 과거 날짜로 세팅하여 데이터 제공을 중단하기로 했다. 그런데 이 과정에서 Timestamp 타입에 알맞지 않은 값이라는 에러가 발생했고 이에 대해 MySQL 날짜 타입인 Timestamp와 Datetime의 차이가 궁금해졌다.
INSERT INTO mydb.tb_test(date_datetime, date_timestamp) VALUES('1970-01-01', '1970-01-01');
차이점 1
Timestamp 타입은 1970-01-01 00:00:01 ~ 2038-01-19 08:44:07까지의 데이터만 지원하고, Datetime 타입은 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 사이의 데이터를 지원한다.
차이점 2
(MySQL 5.6.4 버전 이상 기준) Timestamp는 4 bytes+ 3byte(초 단위를 저장하기 위함) 크기를 필요로 하며, Datetime 타입은 5byte + 3byte(초 단위를 저장하기 위함) 크기를 필요로 한다.
차이점 3
Timestamp 타입의 값은 현재 시각 → UTC 시각으로 변환되며 Datetime은 변환되지 않는다. 만약 글로벌 서비스에서 Datetime을 사용하여 날짜를 표현할 경우, 한국에서 17:00시에 작성된 글이 미국에서도 그대로 17:00시에 저장된 것처럼 보일 수 있다. 그러므로 Timestamp 타입을 사용하여 날짜를 표현하는 게 좋다.
차이점 4Timestamp 타입은 인덱스를 타지만 Datetime 타입은 인덱스를 타지 않는다.(수정) Timestamp와 Datetime 모두 인덱스 잘 탄다.
차이점 4
Timestamp 타입을 갖는 쿼리는 캐시로 저장되나 Datetime 타입을 갖는 쿼리는 캐시로 저장되지 않는다.
결론: 웬만하면 날짜 형식은 Timestamp 타입을 사용하자.
참고자료
- https://www.tutorialspoint.com/What-is-the-difference-between-MySQL-DATETIME-and-TIMESTAMP-data-type
'데이터베이스 > MySQL' 카테고리의 다른 글
[MySQL] 쿼리성능 개선하며 알게된 것 기록 📝 (0) 2022.08.20 [MySQL] 숫자가 포함된 문자열 정렬 (0) 2022.07.06 [MySQL] Table Lock (feat. Deadlock 💀) (0) 2022.04.18 [MySQL] 테이블의 auto increment number 가져오기 (0) 2022.03.28 [MySQL] GROUP_CONCAT length 제한 (0) 2022.03.04