반응형

DATETIME 


index : 불가능

time zone : 영향 없음

타입 : 문자형

용량 : 8 byte

지원 범위 : 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

ON UPDATE 구문 : 사용 가능 (사용 불가로 알고 있었는데 테스트해보니 잘 되네요.)

 

TIMESTAMP


index : 가능

time zone : 영향 있음

타입 : 숫자형

용량 : 4 byte

지원 범위 : 1970-01-01 00:00:00  ~ 2038-01-19 03:14:07

ON UPDATE 구문 : 사용 가능

 

※ 주의 : 마이크로 초까지 얻으려면 timestamp( 1~6의 값 )을 설정 해줘야 합니다. 

설정하지 않을 경우 기본값 0

 

 

DATETIME과 TIMESTAMP의 차이점


DATETIME은 입력된 날짜와 시간 그대로 데이터를 저장하지만

TIMESTAMP는 time_zone 시스템 변수로 값을 지정한다.

TIMESTAMP는 데이터 입출력시 time_zone 시스템 변수 값을 체크해 그 기반으로 변환하여 처리한다.

 

한마디로 가장 큰 차이점은 DATETIME은 일정하며 TIMESTAMP는 time_zone 설정의 영향을 받습니다.

 

아주 대표적인 예로 보자면

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 |
+---------------------+---------------------+
출처 : tech-recipes

 

결론은 TIMESTAMP는 time_zone 시스템 변수에 따른 값 변화가 크다는 것이다.

 

그럼 변수가 많으니 무조건 DATETIME을 써야 할까요? 그렇지 않습니다.

해외에 나가는 사이트라면 TIMESTAMP와 DATETIME을 적절히 잘 사용하여야 합니다.

 

더욱 자세한 걸 원하시는 분은

 

TIMESTAMP

https://mariadb.com/kb/en/timestamp/

 

DATETIME

https://mariadb.com/kb/en/datetime/

 

반응형

+ Recent posts