내 목적을 위해 알아 냈어요. 제가 배운 내용을 요약하겠습니다 (죄송합니다.이 메모는 장황합니다. 다른 어떤 것보다도 향후 추천을위한 것입니다).
이전 의견 중 하나에서 말한 것과 달리 DATETIME 및 TIMESTAMP 필드 는 다르게 작동합니다. TIMESTAMP 필드 (문서에서 알 수 있듯이)는 "YYYY-MM-DD hh : mm : ss"형식으로 보내는 모든 항목을 가져와 현재 시간대에서 UTC 시간으로 변환합니다. 그 반대는 데이터를 검색 할 때마다 투명하게 발생합니다. DATETIME 필드는이 변환을 수행하지 않습니다. 그들은 당신이 보내는 모든 것을 가져다가 직접 저장합니다.
DATETIME 및 TIMESTAMP 필드 유형 모두 DST를 준수하는 시간대의 데이터를 정확하게 저장할 수 없습니다. . "2009-11-01 01:30:00"을 저장하면 필드에서 원하는 오전 1시 30 분 버전 (-04 : 00 또는 -05 : 00 버전)을 구분할 방법이 없습니다.
좋습니다. 따라서 데이터를 비 DST 시간대 (예 : UTC)에 저장해야합니다. TIMESTAMP 필드는 설명 할 이유 때문에이 데이터를 정확하게 처리 할 수 없습니다. 시스템이 DST 시간대로 설정되어있는 경우 TIMESTAMP에 입력 한 내용이 반환되지 않을 수 있습니다. 이미 UTC로 변환 한 데이터를 보내더라도 데이터가 현지 시간대에 있다고 가정하고 또 다른 UTC로 변환합니다. 이 TIMESTAMP 적용 로컬 -UTC- 백-로-로컬 왕복은 현지 시간대가 DST를 준수 할 때 손실이 발생합니다 ( '2009-11-01 01:30:00'이 가능한 두 시간에 매핑되기 때문).
DATETIME을 사용하면 원하는 시간대에 데이터를 저장할 수 있으며 전송 한 데이터를 모두 되 찾을 수 있습니다 (TIMESTAMP 필드가 제공하는 손실 왕복 변환에 강요되지 않음). 따라서 해결책은 DATETIME 필드를 사용하고 필드에 저장하기 전에 시스템 시간대에서 저장하려는 비 DST 영역으로 변환하는 것입니다 (UTC가 아마도 가장 좋은 옵션이라고 생각합니다). 이를 통해 "2009-11-01 01:30:00 -04 : 00"또는 ""2009-11-01 01:30 "에 해당하는 UTC를 명시 적으로 저장할 수 있도록 스크립트 언어로 변환 논리를 빌드 할 수 있습니다. 00 -05 : 00 "
주목해야 할 또 다른 중요한 점은 날짜를 DST TZ에 저장하면 MySQL의 날짜 / 시간 수학 함수가 DST 경계에서 제대로 작동하지 않는다는 것입니다. 따라서 UTC로 저장할 더 많은 이유가 있습니다.
요약하자면 이제 이렇게합니다.
데이터베이스에서 데이터를 검색 할 때 :
정확한 Unix 타임 스탬프를 얻기 위해 데이터베이스의 데이터를 MySQL 외부의 UTC로 명시 적으로 해석합니다. 이를 위해 PHP의 strtotime () 함수 또는 DateTime 클래스를 사용합니다. CONVERT_TZ는 모호성 문제가있는 'YYYY-MM-DD hh : mm : ss'값만 출력하고 UNIX_TIMESTAMP ()는이를 가정하기 때문에 MySQL의 CONVERT_TZ () 또는 UNIX_TIMESTAMP () 함수를 사용하여 MySQL 내부에서 안정적으로 수행 할 수 없습니다. 입력은 데이터가 실제로 (UTC)에 저장된 시간대가 아니라 시스템 시간대에 있습니다.
데이터를 데이터베이스에 저장할 때 :
MySQL 외부에서 원하는 정확한 UTC 시간으로 날짜를 변환하십시오. 예 : PHP의 DateTime 클래스를 사용하면 "2009-11-01 1:30:00 EDT"와는 별도로 "2009-11-01 1:30:00 EST"를 지정한 다음 UTC로 변환하고 정확한 UTC 시간을 저장할 수 있습니다. DATETIME 필드에.
휴. 모든 사람의 의견과 도움에 감사드립니다. 바라건대 이것은 다른 사람의 두통을 덜어주기를 바랍니다.
BTW, MySQL 5.0.22 및 5.0.27에서 이것을보고 있습니다.