How MySQL TIMESTAMP stroed in the database
MySQL TIMESTAMP 열(column)의 형식은 'YYYY-MM-DD HH:MM:SS'이며 19개 문자로 고정됨.
MySQL TIMESTAMP는 '1970-01-01 00:00:01'을 시작으로 초(second)를 4 byte의 숫자로 저장함.
4 byte의 수치에 대응되는 범위에 따라 TIMESTAMP는 '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'의 범위를 갖음.
MySQL TIMESTAMP 값은 connection's time zone에 종속적.
MySQL TIMESTAMP에 값을 입력할 때, 이 값은 connection's time zone에서 Universal Coordinated Time(UTC, 국제 표준시)로 변환됨.
값을 선택하면, server는 UTC에서 connection's time zone으로 변환하므로 입력했던 동일한 값을 얻음.
create table test_timestamp(t1 timestamp);
set time_zone='+00:00';
insert into test_timestamp values('2008-01-01 00:00:01');
select t1 from test_timestamp; |
+---------------------+ | t1 |
+---------------------+
| 2008-01-01 00:00:01 |
+---------------------+
1 row in set (0.00 sec) |
set time_zone='+03:00';
select t1
from test_timestamp; |
+---------------------+ | t1 |
+---------------------+
| 2008-01-01 03:00:01 |
+---------------------+
1 row in set (0.00 sec) |
CREATE TABLE tbl_name( … created_on TIMESTAMP DEFAULT 0 changed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); [출처] Understanding MySQL TIMESTAMP|작성자 someonenice
|
--
필드 지정시 날짜와 관련이 되면 이전부터 많이들 TIMESTAMP를 사용하였는데요
일단, 둘의 차이점을 알아봅시다
TIMESTAMP만의 특성입니다.
범위가 '1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC로 제한됨
on update CURRENT_TIMESTAMP 옵션을 사용할 수 있다.
이러한 차이는 쉽게 말하면
DATETIME는 순수하게 상수로 된 날짜로 인식하지만,
TIMESTAMP는 서버시간에 의한 의존하는 날짜 개념이죠.(서버 time zone 변경시, 바뀝니다)
해외서버를 사용한다면, 문제를 일으킬 수 있는 부분입니다.
국내에서만 사용 할 경우는 별다른 문제가 일어나지 않겠지요.(아마도??)
on update CURRENT_TIMESTAMP 이건, UPDATE시 시간도 업데이트 해주는건데, TIMESTAMP타잎에서만 사용할수 있습니다. 수정된 시간 저장시 매우 유용하게 사용할 수 있는 거죠.
반면에,
클라이언트의 시간을 서버에서 받아서 저장을 하다면, TIMESTAMP보다는 DATETIME을 사용을 권장하게 되겠네요.
등록시간은 DATETIME으로 잡고, 수정시간은 TIMESTAMP on update CURRENT_TIMESTAMP로 사용하면, 편할 거 같다는 생각이 듭니다. 물론 UTC나 timezone에 영향은 고려해야겠지요.
DATETIME
- 범위 : '1000-01-01 00:00:00' 에서 '9999-12-31 23:59:59'
TIMESTAMP[(M)]
- 범위 : '1970-01-01 00:00:00' 에서 2037
출처:http://jpss.ta3ke.com/59
'DB > Mysql' 카테고리의 다른 글
Mysql 데이터 타입 (0) | 2013.06.21 |
---|---|
MySQL 기본 쿼리문 정리 (0) | 2013.06.17 |