2015년 1월 2일 금요일

Mysql TimeStamp datetime

출처 : http://resl.tistory.com/13

MySQL에는 날짜 및 시간을 저장하는 데이터 타입이 여러가지 있습니다.

그 중 대표적인 것들이 datetime, date, 그리고 timestamp인데요
datetime은 날짜+시간, 즉 '2010-10-20 21:56:23' 와 같은 형식이고
date는 datetime에서 시간이 없는 '2010-10-20'의 형식입니다.

그럼 timestamp는 뭘까요?
timestamp도 datetime과 마찬가지로 '2010-10-20 21:56:23' 같은 형식을 갖습니다.


하지만 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는 4바이트입니다.

datetime은 주로 날짜 자체가 특정한 정보이고 이를 저장할 때 쓰이며,
timestamp는 그 자체가 주된 정보라기 보다는 해당 row가 언제 생겼는지, 또는 언제 업데이트 됐는지를 표시하기 위해 사용됩니다.

그래서 timestamp에서는 특별한 기능이 있습니다.
테이블을 생성할 때 timestamp 컬럼에는 다음과 같은 옵션을 줄 수 있습니다.
(컬럼 이름이 ts인 경우)

ts TIMESTAMP DEFAULT 0
=> 기본값을 0로 둡니다. 값을 바꾸기 위해서는 사용자가 직접 업데이트 해줘야 합니다.

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
=> 기본값이 0으로 생성되지만, 해당 row가 update되면 해당 시간으로 자동 업데이트됩니다.

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
=> row가 생성될 때의 시간이 기본값으로 들어갑니다. 자동으로 업데이트 되지는 않습니다.

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
=> row가 생성될 때의 시간이 기본값이며, row가 update될 때 자동으로 업데이트 됩니다.

참고로 timestamp는 저장될 때 내부적으로 UTC를 기준으로 변환되어 저장됩니다.
즉, 같은 값이 저장되어 있더라도 timezone 설정이 어떻게 되어있느냐에 따라서 쿼리 결과가 달라질 수 있습니다.

댓글 없음:

댓글 쓰기