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

소개



MySQL을 사용해 본 적이 있고 테이블 구조를 생성해야 했다면 DATETIMETIMESTAMP 데이터 유형이 많은 유사점을 가지고 있기 때문에 언뜻 보기에 매우 유사하다는 것을 알아차렸을 것입니다.

이 튜토리얼에서는 각각을 살펴보고 언제 사용해야 하는지 알 수 있도록 둘 사이의 주요 차이점을 알아봅니다.

https://stackoverflow.com/questions/409286/should-i-use-the-datetime-or-timestamp-data-type-in-mysql

날짜 시간


DATETIME 유형은 날짜와 시간을 모두 포함하는 값에 사용됩니다.

예를 들어, 값을 검색할 때 MySQL은 값을 YYYY-MM-DD hh:mm:ss 형식으로 표시합니다.

중요한 차이점은 현재 지원되는 범위가 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 이라는 것입니다.
DATETIME는 날짜와 시간을 저장하지만 특정 시간대에 대한 참조가 없기 때문에 리터럴 값으로 생각할 수 있습니다. 따라서 NOW() 값을 저장하면 예를 들어 서버 시간대가 사용됩니다. 삽입되면 DATETIME 값은 현재 세션에 관계없이 동일하게 유지됩니다.

이것은 아래의 예를 살펴보고 나면 조금 더 명확해질 중요한 구분입니다.

타임스탬프


DATETIME 와 마찬가지로 TIMESTAMP 데이터 유형에는 YYYY-MM-DD hh:mm:ss 형식의 날짜와 시간이 모두 포함됩니다.

그러나 DATETIME 와 달리 TIMESTAMP 데이터 유형은 1970-01-01 00:00:01 UTC에서 2038-01-19 03:14:07 UTC 사이의 고정된 범위를 갖습니다. 모든 애플리케이션 및 사용 사례에 적합하지 않을 수 있으므로 이 제한을 항상 고려해야 합니다. 이 특정 범위에 대한 자세한 내용은 Unix Time 에 대해 자세히 읽어보십시오.

명심해야 할 중요한 사항은 TIMESTAMP 열의 값을 표시할 때 현재 표준 시간대로 변환된다는 것입니다. MySQL은 값을 저장할 때 TIMESTAMP 값을 현재 시간대에서 UTC로 변환하지만 그런 다음 값을 다시 UTC에서 검색의 현재 시간대로 변환합니다.

이것을 좀 더 명확하게 하기 위해 다음 예를 살펴보겠습니다!

예시



두 데이터 유형 각각에 대해 단 두 개의 열이 있는 매우 간단한 테이블을 만들어 보겠습니다.

CREATE TABLE demo_table(
    datetime_column DATETIME,
    timestamp_column TIMESTAMP
);


그런 다음 NOW()를 사용하여 둘 다에 동일한 값을 삽입해 보겠습니다.

INSERT INTO demo_table VALUES ((NOW()),(NOW()));


그런 다음 두 열의 값을 확인합니다.

SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 17:42:16 |
+---------------------+---------------------+


지금까지 두 열의 값은 동일합니다. 하지만 현재 시간대를 확인해 보겠습니다.

SHOW VARIABLES LIKE '%time_zone%';

// Output
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+


다음으로 현재 세션의 시간대를 변경해 보겠습니다.

SET time_zone="America/New_york";


참고: 다음 오류가 발생하면 ERROR 1298 (HY000): Unknown or incorrect time zone: 'America/new_york' 다른 터미널 창에서 다음 명령을 실행할 수 있습니다.

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql


그런 다음 출력 값이 어떻게 변경되는지 봅시다.

SELECT * FROM demo_table;

// Output
+---------------------+---------------------+
| datetime_column     | timestamp_column    |
+---------------------+---------------------+
| 2021-12-04 17:42:16 | 2021-12-04 12:42:16 |
+---------------------+---------------------+


보시다시피 datetime_column의 표시된 값은 그대로 유지되었지만 timestamp_column 값이 변경되어 현재 시간대를 참조하고 있습니다.

결론



이게 전부입니다! 이제 datetimetimestamp의 주요 차이점이 무엇인지 더 잘 알 수 있을 것입니다!

일반적으로 SQL에 대해 더 자세히 알고 싶다면 다음 무료 전자책을 추천합니다.
  • Introduction to SQL open-source eBook

  • 이미 매일 SQL을 사용하고 있고 데이터 분석의 대기 시간을 획기적으로 줄이는 방법을 찾고 있다면 다음을 확인하십시오Materialize!



    Materialise는 실시간 분석을 위한 스트리밍 데이터베이스입니다. 증분 보기 업데이트를 제공하는 반응형 데이터베이스이며 개발자가 표준 SQL을 사용하여 스트리밍 데이터로 쉽게 구축할 수 있도록 도와줍니다.

    좋은 웹페이지 즐겨찾기