Database

[MySQL] 타입 비교 1 - Timestamp 와 Datetime

dev-sy 2023. 1. 16. 17:43

1. DB 타임존 의존 여부

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.) By default, the current time zone for each connection is the server's time.

 

TIMESTAMP 타입의 값은 현재 타임존 시각 -> UTC 시각으로 변환되어 저장되고, 검색 시에는 다시 현재 타임존 시각으로 변환되지만, DATETIME은 그렇지 않다.

 

DATETIME을 사용하면 한국에서 14:00에 저장된 데이터가 미국에서도 14:00으로 저장된 것처럼 보이고, TIMESTAMP을 사용하면 미국에서는 14:00이 아니라 현지 시각으로 저장된 것처럼 보인다.

 

만약 SQL 타임존 설정을 중간에 바꾼다면 1분 차이로 저장된 DATETIME 타입의 데이터가 몇 시간이나 차이나도록 저장될 수 있다.

 

MySQL 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/datetime.html

 

2. 시간 범위

둘 다 최대 6자리 microseconds까지 지원한다.

 

DATETIME:

'1000-01-01 00:00:00' to '9999-12-31 23:59:59'

DATETIME(6): 

'1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'

 

TIMESTAMP:

1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC

TIMESTAMP(6)

'1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'

 

MySQL 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/datetime.html

 

3. 저장 공간 

MySQL 5.6.4 이후: 

 

DATETIME: 5 바이트 + 소수점 MS 단위 저장

TIMESTAMP: 4 바이트 + 소수점 MS 단위 저장

 

소수점 1,2 -> 1바이트

3,4 -> 2바이트

5,6 -> 3바이트

 

MySQL 5.6.4 이전:

 

DATETIME: 8 바이트 

TIMESTAMP: 4 바이트

 

 

MySQL 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-date-time

 

 

 

728x90