MySQL에서 DateTime 또는 Timestamp 데이터 유형을 사용해야합니까?


질문

 

DateTime 또는 Timestamp 필드를 사용하는 것이 좋습니다. 왜 (MySQL 사용) 왜 (사용)?

나는 서버 측에서 PHP로 일하고있다.


답변

 

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

유닉스 타임 스탬프 또는 네이티브 MySQL DateTime 필드를 결정하려는 경우 원시 형식으로 이동하십시오.MySQL에서 계산을 할 수 있습니다 ( "date_add (my_datetime, 간격 1 일)") "를 선택하면 UNIX 시간 소인을 쿼리 할 때 값의 형식을 UNIX 시간 소인 ("UNIX_TIMESTAMP (my_dateTime) "으로 변경하여 쉽게 사용할 수 있습니다.PHP.



답변

MySQL 5 이상에서는 시간 소인 값이 현재 시간대에서 UTC에서 UTC에서 UTC로 변환되며 Retrieval의 현재 시간대로 UTC에서 현재 시간대로 변환됩니다.(이는 타임 스탬프 데이터 유형에만 발생하며 DateTime과 같은 다른 유형이 아닙니다.)

기본적으로 각 연결의 현재 시간대는 서버의 시간입니다.MySQL 서버 표준 시간대 지원에 설명 된대로 시간대가 연결 당 연결할 수 있습니다.



답변

나는 항상 행 메타 데이터 (생성 된 날짜 또는 수정)가 아닌 다른 것에 대해 DateTime 필드를 사용합니다.

MySQL 문서에서 언급했듯이 :

DateTime 유형은 날짜와 시간 정보가 모두 포함 된 값이 필요할 때 사용됩니다.MySQL은 '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'UTC의 범위가 있습니다. '2038-01-09 03:14:07'UTC.MySQL 버전과 서버가 실행중인 SQL 모드에 따라 다양한 속성이 있습니다.

일반적으로 사용중인 타임 스탬프에 대한 하한을 칠 가능성이 큽니다.탄생일 저장.



답변

아래의 예제는 타임 스탬프 날짜 유형이 시간대를 'america / new_york'로 변경 한 후 값을 'america / new_york'로 변경 한 방법을 보여줍니다.

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 |
+---------------------+---------------------+

나는 더 많은 사람들이 이것을 유용하게 찾을 수있는 기사에 대한 내 대답을 기사로 변환하여 MySQL : DateTime 대 타임 스탬프 데이터 유형을 찾을 수 있습니다.



답변

주요 차이점은 DateTime이 시간 소인이 TIME_ZONE 설정의 영향을받는 동안 DATETIME이 일정하다는 것입니다.

따라서 미래의 시간대에 대한 동기화 된 클러스터가있는 경우에만 중요합니다.

더 간단한 단어 : 호주에 데이터베이스가 있고 미국에서 데이터베이스를 동기화 / 채우기 위해 해당 데이터베이스 덤프를 가져 와서, 시간 소인은 새로운 시간대의 이벤트의 실시간을 반영하여 이벤트 시간을 반영합니다.AU 시간대에서 이벤트의 시간을 여전히 반영합니다.

타임 스탬프가 사용되어야하는 곳에서 사용되는 DateTime의 훌륭한 예가 Facebook에 있습니다. 서버가 시간대에 걸쳐 어떤 시간 일이 일어 났는지 확실하지 않습니다.일단 메시지가 실제로 메시지가 전송되기 전에 메시지에 회신 할 때 대화를 나누었습니다.(물론 시간이 동기화되지 않고 시간이 게시되는 경우 메시징 소프트웨어에서 나쁜 시간대 번역으로 인해 발생할 수도 있습니다.)



답변

나는이 결정을 의미하는 시맨틱 기지로 만듭니다.

나는 (다소도) 고정 시점을 기록해야 할 때 타임 스탬프를 사용합니다.예를 들어 레코드가 데이터베이스에 삽입되거나 일부 사용자 작업이 일어 났을 때.

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

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