Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL DATETIME과 TIMESTAMP 데이터 유형의 차이점은 무엇입니까?


두 데이터 유형 모두 "YYYY-MM-DD HH:MM:SS" 형식으로 데이터를 저장하고 날짜와 시간을 포함합니다. 이러한 유사점에도 불구하고 다음과 같은 차이점이 있습니다. -

  • 범위 − Datetime 데이터 유형은 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 사이의 시간과 함께 날짜를 지원합니다. 하지만 타임스탬프 데이터 유형은 '1970-01-01 00:00:01'에서 '2038-01-19 08:44:07' 사이의 시간과 함께 날짜를 지원합니다.
  • 크기 − Datetime은 소수 초 단위의 데이터 저장을 위해 3바이트와 함께 5바이트가 필요합니다. 반면 타임스탬프 데이터 유형은 소수 초 단위의 데이터 저장을 위해 4바이트와 3바이트가 추가로 필요합니다. 그러나 MySQL 5.6.4 이전에는 DateTime에 8바이트와 소수의 초 단위 데이터 저장을 위해 3바이트가 추가로 필요했습니다.
  • 한 시간대에서 다른 시간대로의 변환 − 실제로 MySQL5+에서 타임스탬프 값은 현재 시간에서 UTC로 또는 그 반대로 변환되지만 datetime은 변환을 수행하지 않습니다.
  • 색인 생성 − 타임스탬프 데이터에 대한 인덱싱은 가능하지만 날짜/시간 데이터는 인덱싱할 수 없습니다.
  • 쿼리 캐싱 - 타임스탬프 데이터 유형을 가진 쿼리는 캐시할 수 있지만 날짜/시간 데이터 유형을 가진 쿼리는 캐시할 수 없습니다.

위에는 DATETIME과 TIMESTAMP 데이터 유형 간의 몇 가지 주요 차이점이 있으며 다음 예에서 이를 보여줍니다. -

예시

mysql> Create table test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.44 sec)

mysql> INSERT INTO test_datetime (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.04 sec)

mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> Create table test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.64 sec)

mysql> INSERT INTO test_timestamp (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.06 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:50 |
+---------------------+
1 row in set (0.00 sec)

이제 다음 쿼리에서 시간대를 UTC-05:00으로 변경하고 결과가 TIMESTAMP 데이터 유형을 갖는 테이블에 대해 변경되었습니다.

mysql> SET @@session.time_zone = '-5:00';
Query OK, 0 rows affected (0.00 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 06:59:50 |
+---------------------+
1 row in set (0.00 sec)

출력

mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)