Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL DATETIME vs TIMESTAMP, 어떤 데이터 타입을 사용해야 할까?

MySQL에서 날짜와 시간을 저장하려면 DATETIMETIMESTAMP 두 가지 데이터 타입 중 하나를 선택하게 됩니다. 두 타입은 비슷해 보이지만 동작 방식과 저장 범위가 다르기 때문에, 프로젝트의 성격에 맞게 올바르게 선택하는 것이 중요합니다.

DATETIME과 TIMESTAMP의 핵심 차이

  • TIMESTAMP: UTC 기준으로 값을 저장하고, 조회 시에는 클라이언트의 시간대(time zone)에 맞춰 자동으로 변환됩니다. 저장 범위는 '1970-01-01 00:00:01' UTC부터 '2038-01-19 03:14:07' UTC까지이며, 4바이트를 사용합니다.
  • DATETIME: 입력된 값을 그대로 저장하며 시간대 변환이 일어나지 않습니다. '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지 지원합니다.

TIMESTAMP 실습 예제

TIMESTAMP가 어떻게 동작하는지 직접 확인해 보겠습니다. 먼저 테스트용 테이블을 생성합니다.

1. 테이블 생성

mysql> CREATE TABLE TimeStampDemo
-> (
-> MyDataTime timestamp
-> );
Query OK, 0 rows affected (0.57 sec)

2. 레코드 삽입

NOW() 함수를 사용해 현재 날짜와 시간을 삽입합니다.

mysql> INSERT INTO TimeStampDemo VALUES (NOW());
Query OK, 1 row affected (0.12 sec)

3. 결과 조회

SELECT 문으로 저장된 레코드를 확인합니다.

mysql> SELECT * FROM TimeStampDemo;
+---------------------+
| MyDataTime |
+---------------------+
| 2018-10-11 17:30:38 |
+---------------------+
1 row in set (0.00 sec)

그렇다면 무엇을 사용해야 할까?

TIMESTAMP가 적합한 경우: 여러 국가의 사용자가 접속하는 글로벌 서비스처럼 시간대 변환이 필요한 경우입니다. 또한 DEFAULT CURRENT_TIMESTAMP와 ON UPDATE CURRENT_TIMESTAMP 옵션을 활용하면 레코드의 생성·수정 시각을 자동으로 관리할 수 있어 로그나 이력 데이터에 유용합니다.

DATETIME이 적합한 경우: 시간대와 무관하게 입력된 값을 그대로 유지해야 하는 경우입니다. 예약일, 생년월일, 역사적 날짜처럼 2038년 이후의 날짜도 다뤄야 한다면 DATETIME을 선택하는 것이 안전합니다.

정리하면, 시간대 자동 변환과 자동 갱신이 필요하다면 TIMESTAMP, 더 넓은 날짜 범위와 고정된 값 저장이 필요하다면 DATETIME을 사용하는 것이 좋습니다.