mysql datetime utc_timestamp




MySQL에서 datetime 또는 timestamp 데이터 유형을 사용해야합니까? (20)

datetime 또는 datetime 필드를 사용 하시길 권하고 MySQL을 사용하는 이유는 무엇입니까?

저는 서버 측에서 PHP로 작업하고 있습니다.


2016 + : 내가 조언하는 것은 당신의 MySQL의 표준 시간대를 UTC로 설정하고 DATETIME을 사용하는 것입니다 :

최근 프론트 엔드 프레임 워크 (Angular 1/2, react, Vue, ...)는 UTC datetime을 로컬 시간으로 쉽고 자동으로 변환 할 수 있습니다.

또한 :

(서버의 시간대를 변경하지 않는 한)

AngularJs 예제

// back-end: format for angular within the sql query
SELECT DATE_FORMAT(my_datetime, "%Y-%m-%dT%TZ")...

// font-end Output the localised time
{{item.my_datetime | date :'medium' }}

현지화 된 시간 형식은 https://docs.angularjs.org/api/ng/filter/date 확인할 수 있습니다.


  1. TIMESTAMP는 DATETIME에 대해 4 바이트 대 8 바이트입니다.

  2. 타임 스탬프 또한 데이터베이스에서 가벼우 며 인덱싱 속도가 빠릅니다.

  3. DATETIME 유형은 날짜 및 시간 정보가 모두 포함 된 값이 필요할 때 사용됩니다. MySQL은 DATETIME 값을 'YYYY-MM-DD HH : MM : SS'형식으로 검색하여 표시합니다. 지원되는 범위는 '1000-01-01 00:00:00'에서 '9999-12-31 23:59:59'입니다.

TIMESTAMP 데이터 형식의 범위는 '1970-01-01 00:00:01'UTC에서 '2038-01-09 03:14:07'UTC입니다. 그것은 서버가 실행중인 MySQL 버전과 SQL 모드에 따라 다양한 속성을가집니다.

  1. DATETIME은 일정하며 TIMESTAMP는 time_zone 설정에 의해 영향을받습니다.

DATETIME, TIMESTAMP 및 DATE 간의 비교

그 [분수] 란 무엇입니까?

  • DATETIME 또는 TIMESTAMP 값에는 마이크로 초 (6 자리)의 정밀도로 후행 초의 초 부분이 포함될 수 있습니다. 특히 DATETIME 또는 TIMESTAMP 열에 삽입 된 값의 분수 부분은 무시되는 대신 저장됩니다. 이것은 물론 선택 사항입니다.

출처 :


MySQL 5 이상에서는 TIMESTAMP 값이 현재 시간대에서 저장을 위해 UTC로 변환되고 UTC에서 검색하기 위해 현재 시간대로 다시 변환됩니다. (이는 TIMESTAMP 데이터 유형에만 발생하며 DATETIME과 같은 다른 유형에는 발생 하지 않습니다 .)

기본적으로 각 연결의 현재 시간대는 서버의 시간입니다. 시간대는 MySQL 서버 시간대 지원에 설명 된 것처럼 연결 단위로 설정할 수 있습니다.


MySQL에서는 테이블 열을 생성 할 때 아래의 내용을 사용할 수 있습니다.

on update CURRENT_TIMESTAMP

이렇게하면 행을 수정하는 각 인스턴스의 시간이 업데이트되고 마지막으로 저장된 편집 정보에 도움이되는 경우가 있습니다. 이것은 타임 스탬프가 아니라 datetime과 함께 작동합니다.


MySQL의 타임 스탬프는 일반적으로 레코드 변경을 추적하는 데 사용되며 레코드가 변경 될 때마다 업데이트됩니다. 특정 값을 저장하려면 datetime 필드를 사용해야합니다.

UNIX 타임 스탬프 또는 네이티브 MySQL datetime 필드를 사용할지 결정하려면 기본 형식으로 이동하십시오. 그렇게하면 MySQL 내에서 ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)") ("SELECT UNIX_TIMESTAMP(my_datetime)") 수 있으며 레코드를 쿼리 할 때 값의 형식을 UNIX 타임 스탬프 ("SELECT UNIX_TIMESTAMP(my_datetime)") 로 변경하는 것이 간단합니다 PHP로 조작하고 싶다면.


TIMESTAMP는 항상 UTC (즉, 1970-01-01 년 이후 경과 된 초, UTC)이며, MySQL 서버는이를 서버 시간대의 날짜 / 시간으로 자동 변환합니다. 장기간에 TIMESTAMP는 시간 데이터가 항상 UTC로 표시된다는 것을 알기 때문에 갈 수있는 방법입니다. 예를 들어 다른 서버로 마이그레이션하거나 서버의 시간대 설정을 변경하는 경우 날짜를 잘못 잡아서는 안됩니다.


Timestamp와 Datetime의 또 다른 차이점은 Timestamp에 있습니다. 기본값은 NULL 일 수 없습니다.


나는이 결정을 의미 론적 근거로 삼는다.

고정 된 시점을 (더 많거나 적게) 기록해야 할 때 타임 스탬프를 사용합니다. 예를 들어 레코드가 데이터베이스에 삽입되거나 사용자 작업이 수행 된 경우.

날짜 / 시간을 임의로 설정하고 변경할 수있는 경우 datetime 필드를 사용합니다. 예를 들어 사용자가 나중에 약속 변경을 저장할 수있는 경우.


내 경험에 비추어, 삽입이 한 번만 발생하는 날짜 필드가 필요하고 특정 필드에 대한 업데이트 나 다른 작업을 원하지 않으면 날짜 시간을 사용하십시오 .

예를 들어, REGISTRATION DATE 필드가있는 user 테이블을 고려하십시오. 해당 user 테이블에서 특정 사용자의 마지막으로 로그인 한 시간을 알고 싶으면 필드가 업데이트되도록 타임 스탬프 유형 필드로 이동하십시오.

phpMyAdmin 에서 테이블을 생성하는 경우 행 업데이트가 발생할 때 기본 설정은 타임 스탬프 필드를 업데이트합니다. 타임 스탬프 필드가 행 업데이트로 업데이트되지 않는 경우 다음 쿼리를 사용하여 타임 스탬프 필드를 자동으로 업데이트 할 수 있습니다.

ALTER TABLE your_table
      MODIFY COLUMN ts_activity TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

시간 timestamp 필드는 datetime 필드의 특별한 경우입니다. timestamp 열을 만들어 특수 속성을 만들 수 있습니다. 생성 및 / 또는 업데이트시 자체를 업데이트하도록 설정할 수 있습니다.

"더 큰"데이터베이스 용어에서, timestamp 에는 특별한 경우 트리거가 두 개 있습니다.

올바른 것은 전적으로 당신이 원하는 것에 달려 있습니다.


아래 예제는 DATETIME 이 변경되지 않은 time-zone to 'america/new_york' 로 변경 한 후 TIMESTAMP 날짜 유형이 값을 어떻게 변경했는지 보여줍니다.

mysql> show variables like '%time_zone%';
+------------------+---------------------+
| Variable_name    | Value               |
+------------------+---------------------+
| system_time_zone | India Standard Time |
| time_zone        | Asia/Calcutta       |
+------------------+---------------------+

mysql> create table datedemo(
    -> mydatetime datetime,
    -> mytimestamp timestamp
    -> );

mysql> insert into datedemo values ((now()),(now()));

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 14:11:09 |
+---------------------+---------------------+

mysql> set time_zone="america/new_york";

mysql> select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2011-08-21 14:11:09 | 2011-08-21 04:41:09 |
+---------------------+---------------------+

필자는 해답을 기사로 변환하여 더 많은 사람들이 Datetime 대 Timestamp 데이터 유형MySQL을 찾을 수있게되었습니다.


저는 유닉스 타임 스탬프를 사용합니다. 많은 datetime 정보를 다룰 때, 특히 시간대 조정, 날짜 추가 / 감산 등을 할 때 정당성을 유지하기 위해 사용합니다. 시간 소인을 비교할 때 시간대 복잡성을 배제하고 서버 측 처리 (응용 프로그램 코드 또는 데이터베이스 조회)에 자원을 절약 할 수 있습니다. 가벼운 가중치 대신에 가중치가 많은 가중치 가산 / 감산 기능.

고려할 가치가있는 또 다른 것 :

응용 프로그램을 작성하는 경우 데이터를 줄 바꿈해야할지 모를 수 있습니다. 예를 들어 써드 파티 API의 여러 항목과 함께 데이터 세트의 여러 레코드를 비교하고 날짜순으로 나열하면, 기꺼이 처리 할 수 ​​있습니다. 행에 대한 유닉스 타임 스탬프. MySQL 타임 스탬프를 사용하기로 결정한 경우에도 Unix 타임 스탬프를 보험으로 저장하십시오.



타임 스탬프 데이터 형식은 날짜와 시간을 저장하지만 datetime처럼 현재 시간대 형식이 아닌 UTC 형식으로 저장됩니다. 그리고 데이터를 가져 오면 타임 스탬프가 다시 현재 시간대 시간으로 변환합니다.

미국에 거주하면서 미국 시간대가있는 서버에서 데이터를 가져 오는 경우를 생각해보십시오. 그런 다음 미국 표준 시간대에 따라 날짜와 시간을 가져옵니다. 타임 스탬프 데이터 형식 열은 행이 업데이트되면 항상 자동으로 업데이트됩니다. 따라서 특정 행이 마지막으로 업데이트 된 시점을 추적하는 것이 유용 할 수 있습니다.

자세한 내용은 블로그 게시물 Timestamp Vs Datetime을 참조하십시오 .


타임 스탬프를 사용하여 모든 것을 하나의 일반적인 원시 형식으로 유지하고 PHP 코드 또는 SQL 쿼리의 데이터 형식을 선호합니다. 모든 것을 초 단위로 유지하는 것이 코드에 도움이되는 경우가 있습니다.


필자는 UTC를 모든 시간대 (시스템, 데이터베이스 서버 등)로 설정할 수있을 때마다 설정했습니다. 고객이 다른 시간대를 필요로하는 경우 앱에서 구성합니다.

타임 스탬프는 암시 적으로 시간대를 포함하기 때문에 거의 항상 datetime 필드보다는 타임 스탬프를 선호합니다. 따라서 응용 프로그램이 다른 시간대의 사용자로부터 액세스되는 순간부터 로컬 시간대에서 날짜와 시간을 볼 수있게하려면이 필드 유형을 사용하면 날짜 / 시간 필드에 데이터가 저장된 경우보다 쉽게 ​​할 수 있습니다 .

더하기, 다른 표준 시간대가있는 시스템으로 데이터베이스를 마이그레이션하는 경우 타임 스탬프를 사용하는 것이 더 확신합니다. 그 사이에 sumer 시간이 변경되고 1 시간 이하의 정밀도가 필요한 두 순간 사이의 차이를 계산할 때 가능한 문제는 말할 필요가 없습니다.

요약하면, 나는 타임 스탬프의 이점을 중요하게 생각한다.

  • 국제 (다중 표준 시간대) 앱에서 사용할 준비가되었습니다.
  • 시간대 간 쉬운 마이그레이션
  • diferences를 계산하는 것은 꽤 쉽다 (단지 타임 스탬프를 뺀다)
  • 여름철 입 / 퇴일에 대한 걱정 없음

이 모든 이유로 UTC 및 타임 스탬프 필드를 선택할 수 있습니다. 그리고 나는 두통을 피한다;)


이 기사에서 인용 한 참고 사항 :

주요 차이점 :

TIMESTAMP는 레코드 변경을 추적하는 데 사용되며 레코드가 변경 될 때마다 업데이트됩니다. DATETIME은 레코드의 변경에 영향을받지 않는 특정 및 정적 값을 저장하는 데 사용됩니다.

TIMESTAMP는 다른 TIME ZONE 관련 설정의 영향을받습니다. DATETIME은 상수입니다.

TIMESTAMP는 저장을 위해 내부적으로 현재 시간대를 UTC로 변환하고 검색 중에 현재 시간대로 다시 변환합니다. DATETIME은 이것을 할 수 없습니다.

TIMESTAMP 지원 범위 : '1970-01-01 00:00:01'UTC ~ '2038-01-19 03:14:07'UTC DATETIME 지원 범위 : '1000-01-01 00:00:00'에서 '9999 -12-31 23:59:59 '


TIMESTAMP는 시간대가 다른 여러 국가의 방문자가있는 경우에 유용합니다. TIMESTAMP를 모든 국가 시간대로 쉽게 변환 할 수 있습니다.


나는 유닉스 타임 스탬프를 좋아한다. 왜냐하면 숫자로 변환 할 수 있고 숫자에 대해서만 걱정할 수 있기 때문이다. 또한 더하기 / 빼기 및 기간 가져 오기 등의 작업을 수행 한 다음 결과를 날짜 형식으로 변환합니다. 이 코드는 문서의 타임 스탬프와 현재 시간 사이의 경과 시간 (분)을 알 수 있습니다.

$date  = $item['pubdate']; (etc ...)
$unix_now = time();
$result = strtotime($date, $unix_now);
$unix_diff_min = (($unix_now  - $result) / 60);
$min = round($unix_diff_min);




sqldatatypes