>데이터 베이스 >MySQL 튜토리얼 >MySQL: `DATETIME` 및 `TIMESTAMP` 사용 및 개선

MySQL: `DATETIME` 및 `TIMESTAMP` 사용 및 개선

王林
王林원래의
2024-07-19 12:40:08743검색

MySQL: Using and Enhancing `DATETIME` and `TIMESTAMP`

소개

MySQL에서는 DATETIME과 TIMESTAMP가 시간 값을 저장하는 데 일반적으로 사용되는 데이터 유형입니다. 둘 다 날짜와 시간을 저장하는 목적으로 사용되지만 사용법에 영향을 미치는 근본적인 차이점이 있습니다. 이 기사에서는 DATETIME과 TIMESTAMP의 차이점을 살펴보고, DATETIME의 몇 가지 제한 사항을 극복하여 TIMESTAMP의 장점을 활용하는 방법을 살펴보겠습니다.

DATETIME과 TIMESTAMP의 차이점

범위:
  • DATETIME: '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지의 값을 저장할 수 있습니다.
  • TIMESTAMP: '1970-01-01 00:00:01'부터 '2038-01-19 03:14:07'까지의 값을 저장할 수 있습니다.
저장:
  • DATETIME: 시간대에 의존하지 않고 날짜 및 시간 형식으로 있는 그대로 저장됩니다. 8바이트의 저장 공간이 필요합니다.
  • TIMESTAMP: 1970-01-01 00:00:00 UTC 이후의 초 수를 나타내는 정수로 저장됩니다. 4바이트의 저장공간이 필요합니다.
시간대:
  • DATETIME: 시간대에 구애받지 않고 값을 그대로 저장합니다.
  • TIMESTAMP: MySQL 서버의 현재 시간대에 영향을 받습니다. 값을 삽입하거나 검색할 때 현지 시간과 UTC 간에 자동으로 변환됩니다.
자동 업데이트:
  • DATETIME: 행 수정 시 직접 자동 업데이트를 지원하지 않습니다.
  • TIMESTAMP: DEFAULT CURRENT_TIMESTAMP 및 ON UPDATE CURRENT_TIMESTAMP 옵션을 사용하여 행이 수정될 때 값을 자동으로 업데이트하도록 설정할 수 있습니다.

DATETIME 사용 개선

DATETIME 데이터 유형의 일부 제한 사항을 극복하려면 다음 전략을 따를 수 있습니다.

1. 시간대 표준화

DATETIME이 시간대를 준수하지 않는 문제를 해결하려면 데이터베이스 및 애플리케이션 수준에서 모든 임시 작업을 UTC를 사용하도록 표준화할 수 있습니다.

UTC로 작동하도록 데이터베이스 설정:
SET GLOBAL time_zone = '+00:00';
SET time_zone = '+00:00';
삽입 시 값을 UTC로 변환:
INSERT INTO example_table (event_time) VALUES (CONVERT_TZ('2024-06-19 12:30:00', 'Your/Timezone', '+00:00'));
검색 시 값을 UTC에서 현지 시간으로 변환:
SELECT CONVERT_TZ(event_time, '+00:00', 'Your/Timezone') as local_event_time FROM example_table;
2. 자동 업데이트

행이 수정될 때 DATETIME 값을 자동으로 업데이트하려면 트리거를 사용할 수 있습니다.

수정 시 필드를 업데이트하는 트리거 만들기:
CREATE TRIGGER before_update_example_table
BEFORE UPDATE ON example_table
FOR EACH ROW
BEGIN
  SET NEW.updated_at = NOW();
END;
3. 기본값 사용

삽입 시 DATETIME 값을 자동으로 설정하려면 NOW() 함수를 사용하여 기본값을 할당할 수 있습니다.

기본 필드 설정:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
4. 취급 정밀도

시간에 대해 더 높은 정밀도가 필요한 경우 DATETIME(6) 또는 TIMESTAMP(6)를 사용하여 최대 마이크로초 정밀도까지 시간을 저장할 수 있습니다.

마이크로초 정밀도로 테이블 생성:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
    updated_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
5. 애플리케이션 처리 시간

모든 시간을 저장하기 전에 UTC로 변환하고 사용자에게 표시할 때 다시 현지 시간으로 변환하여 애플리케이션이 시간을 올바르게 처리하는지 확인하세요.

PHP의 예:
// Setting the application time zone to UTC
date_default_timezone_set('UTC');

// Storing the current time as UTC
$current_time_utc = date('Y-m-d H:i:s');
$query = "INSERT INTO example_table (event_time) VALUES ('$current_time_utc')";

// Retrieving the time and converting it to local time
$event_time_utc = '2024-06-19 12:30:00';
$event_time_local = new DateTime($event_time_utc, new DateTimeZone('UTC'));
$event_time_local->setTimezone(new DateTimeZone('Your/Timezone'));
echo $event_time_local->format('Y-m-d H:i:s');

요약

  • DATETIME: 시간대 종속 없이 날짜와 시간을 저장하는 데 사용됩니다. 향후 이벤트 또는 고정된 일정에 적합합니다.
  • TIMESTAMP: 현재 시간대를 기준으로 시간을 추적하는 데 사용됩니다. 데이터가 삽입되거나 업데이트되는 시간을 로깅하는 데 적합합니다.

DATETIME 개선

  • 표준 시간대: UTC를 사용하여 시간을 표준화합니다.
  • 자동 업데이트: 트리거를 사용하여 필드를 자동으로 업데이트합니다.
  • 기본값: DATETIME 필드의 기본값을 설정합니다.
  • 정밀도: 정밀도를 높이려면 DATETIME(6)을 사용하세요.
  • 애플리케이션에서 시간 처리: UTC와 현지 시간 사이의 시간을 올바르게 변환합니다.

이러한 전략을 따르면 DATETIME을 사용하는 동안 TIMESTAMP의 이점을 활용하여 시간적 값을 더 쉽고 효율적이고 효과적으로 처리할 수 있습니다.

위 내용은 MySQL: `DATETIME` 및 `TIMESTAMP` 사용 및 개선의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.