code

datetime 또는 timestamp를 사용하는 경우

codestyles 2020. 11. 5. 08:02
반응형

datetime 또는 timestamp를 사용하는 경우


이 질문에 이미 답변이 있습니다.

나는 이것을 검색했지만 명확한 답변은 없습니다 (특히 후자). 어떤 경우에 datetime 또는 timestamp를 사용해야합니까?


MS SQL Server를 사용하고 있다고 가정합니다 (사용하지 않는 경우 아래 업데이트 참조 ).

테이블에는 타임 스탬프 열이 하나만있을 수 있습니다. 타임 스탬프 열의 값은 타임 스탬프 열을 포함하는 행이 삽입되거나 업데이트 될 때마다 업데이트됩니다. 이 속성은 타임 스탬프 열을 키, 특히 기본 키에 적합하지 않게 만듭니다. 행을 업데이트하면 타임 스탬프 값이 변경되어 키 값이 변경됩니다. 열이 기본 키에있는 경우 이전 키 값은 더 이상 유효하지 않으며 이전 값을 참조하는 외래 키는 더 이상 유효하지 않습니다. 테이블이 동적 커서에서 참조되는 경우 모든 업데이트는 커서의 행 위치를 변경합니다. 열이 인덱스 키에있는 경우 데이터 행에 대한 모든 업데이트는 인덱스 업데이트도 생성합니다.

MSDN 에 대한 정보

행에 대한 날짜 / 시간 정보를 저장해야하고 해당 날짜 / 시간이 변경되지 않은 경우 DateTime을 사용하십시오. 그렇지 않으면 타임 스탬프를 사용하십시오.

또한 참고 : MS SQL Server 타임 스탬프 필드는 날짜 나 시간이 아니며 데이터가 변경된시기의 상대 순서를 이진으로 표현한 것입니다.

최신 정보

MySQL을 말하도록 업데이트했습니다.

TIMESTAMP 값은 저장을 위해 현재 시간대에서 UTC로 변환되고 검색을 위해 UTC에서 현재 시간대로 다시 변환됩니다. (이는 DATETIME과 같은 다른 유형이 아닌 TIMESTAMP 데이터 유형에 대해서만 발생합니다.)

MySQL 참조 에서 인용

특히 :

TIMESTAMP 값을 저장 한 다음 시간대를 변경하고 값을 검색하는 경우 검색된 값은 저장 한 값과 다릅니다.

따라서 시간대에 걸쳐 애플리케이션을 사용하고 개별 사용자 설정을 반영하는 날짜 / 시간이 필요한 경우 타임 스탬프를 사용합니다. 시간대에 관계없이 일관성이 필요한 경우 Datetime을 사용하십시오.


'datetime'또는 'timestamp'필드를 사용해야합니까?를 참조하십시오 . 주제에 대한 포괄적 인 커버리지가 있습니다.

편집-MySQL의 속성과 그것에 대한 나의 경험을 요약하기 위해-

타임 스탬프-

a) 열당 4 바이트 (날짜 시간의 경우 8 바이트와 비교)

  • DATETIME보다 낮은 범위 ( '1970-01-01 00:00:01'UTC ~ '2038-01-09 03:14:07'UTC)-따라서 생년월일 등에 사용하지 마십시오. 대부분의 사용 패턴은 다음과 같습니다. 실제로 행 업데이트 등과 같은 활동에 'NOW'의 '타임 스탬프'를 제공합니다.

b) 내부적으로 정수로 저장

  • 성능면에서 ... 내 개인적인 경험은 모호했습니다. 가끔은 더 빠릅니다 ... 때로는 DATETIME보다 느립니다. 그래도 공간이 덜 걸립니다.

c) 시간대 정보가 있습니다!

  • 그래서-TIMESTAMP에 '2011-01-01 3:30'을 추가하면 (현재 시간대는 EST-Boston) .. 나중에 서버 및 mysql 시간대를 PST (캘리포니아)로 변경하고 서버를 다시 시작하면 값이 변경됩니다 to '2011-01-01 00:00'-(확인하십시오 ... 오래 전에 이것을 테스트했습니다). 그러나 DATETIME은 동일하게 유지됩니다.

d) 모든 DATE () / DAY () / MONTH () 함수는 TIMESTAMP 및 DATETIME 모두에서 작동합니다.

e) MySQL에서는 테이블 당 여러 TIMESTAMPS를 가질 수 있습니다.

  • (예, 그러나 그중 하나 (첫 번째) 만 행 업데이트시 자동으로 업데이트됩니다. 또한 하나만 NOT NULL로 만들 수 있습니다 (첫 번째를 생각하십시오))

f) 테이블의 첫 번째 TIMESTAMP가 자동으로 업데이트됩니다 ...

  • 그러니 다른 목적으로 사용하고 거기에 널을 허용하려면 조심하십시오. (null은 DATETIME 및 TIMESTAMP 모두에 '0000-00-00 00:00:00'으로 저장 됨)

다른 목적으로 여러 타임 스탬프를 사용했습니다. 공간을 절약해야합니다 (매우주의해야하고 이러한 모든 문제를 염두에 두어야합니다.

내 충고는 u가 무엇을하고 있는지 알고있는 경우에만 타임 스탬프가 아닌 목적으로 TIMESTAMP로 이동합니다. 그리고 SPACE가 큰 관심사 인 경우 (예 : 15,000,000 행 및 8 개 datetimes!)


귀하의 질문을 명확하게 얻지 못했지만 아래 링크를 참조하십시오. 그것은 당신을 도울 수 있습니다

http://www.sqlteam.com/article/timestamps-vs-datetime-data-types


데이터베이스 서버를 지정해야합니다.

일부 서버 엔진은 타임 스탬프 필드를 자동으로 업데이트하므로 낙관적 잠금 에서 레코드 버전으로 사용할 수 있습니다.


  • MySQL에서는 DateTime유형에서 DATE()관련 함수로 작업 할 수있는 반면, 유형 에서는 timestamp할 수 없습니다.
  • Timestamp이전 값을 보유 할 수 없습니다 01-01-1970.
  • 또한 그들 중 하나는 일광 절약 제를 보유하고 다른 하나는 보유하지 않습니다 (지금은 어느 것이 기억 나지 않습니다)

나는 항상 선택하는 경향이 있습니다 DateTime.

참고 URL : https://stackoverflow.com/questions/5989539/when-to-use-datetime-or-timestamp

반응형