2023-07-04 20:15:52

MySQL에서 일시(년,월,일,시,분,초) 정보를 저장할 때 주로 DATETIME과 TIMESTAMP를 사용합니다. 그런데 어떤 경우에 DATETIME을 사용해야 하는지, TIMESTAMP를 사용해야 하는지 판단이 잘 안 설 수 있습니다. 아래 둘의 차이에 대한 내용을 보고 나시면 어느 정도 판단의 기준이 생겨나실 것입니다. 

 

DATETIME과 TIMESTAMP 비교

범위

DATETIME: 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지의 범위를 가집니다. DATETIME은 날짜 및 시간 정보를 지정하기에 더 넓은 범위를 제공합니다. (8바이트)

TIMESTAMP: 1970-01-01 00:00:01 UTC부터 2038-01-19 03:14:07 UTC까지의 범위를 가집니다. TIMESTAMP는 32비트(4바이트) 정수로 저장되어 있어, 2038년 이후의 날짜에 대해서는 문제가 발생할 수 있습니다. 

 

저장 방식

DATETIME: 데이터베이스에 입력한 값과 동일한 형태로 저장됩니다. 즉, 입력한 날짜 및 시간 정보가 그대로 문자열로 저장됩니다. 

TIMESTAMP: UTC를 기준으로 1970년 1월 1일 00:00:01부터 경과한 "초"가 숫자형으로 저장됩니다. TIMESTAMP는 서버의 타임존 설정에 따라 변환되어 저장되므로, 서로 다른 타임존 설정을 가진 서버 간에 값을 교환할 때 문제가 발생할 수 있습니다. 

 

자동 업데이트

DATETIME: 수동으로 값을 입력해야 합니다. 자동으로 업데이트되게 할 수 없습니다.

TIMESTAMP: 기본적으로 ON UPDATE CURRENT_TIMESTAMP 옵션이 설정되어 있으며, 행이 업데이트될 때마다 현재 시간으로 자동 업데이트됩니다.

 

용도

DATETIME: 일반적으로 날짜 및 시간 정보를 저장하고 검색하는 데 사용됩니다. 예를 들어, 이벤트의 일정 날짜 및 시간을 저장하거나 시간 간격을 계산하는 데 유용합니다.

TIMESTAMP: 주로 변경 이벤트를 추적하거나 행의 버전을 관리하는 데 사용됩니다. 특히, row-level 변경 추적이 필요한 경우 TIMESTAMP를 활용할 수 있습니다.