DATETIME과 TIMESTAMP 데이터 타입의 저장 방식과 저장 범위를 비교 분석
explicit_defaults_for_timestamp 시스템 변수와 Y2K38 문제 등 기능적 특징을 설명
타임존 정보 및 저장 범위를 고려하여 데이터 타입 선택 가이드 제시
DATETIME은 5 Bytes 정수부와 소수부로 시간을 저장하며, TIMESTAMP는 MYSQL_TIME 구조체를 활용한다. 구체적으로 DATETIME은 Fraction Seconds를 위해 소수부 저장 방식을 사용하며, TIMESTAMP는 UTC 변환을 거쳐 데이터를 저장한다. 따라서 타임존 처리에 차이가 있다.
이 변수는 TIMESTAMP 타입의 기본값 설정에 영향을 미친다. explicit_defaults_for_timestamp=OFF인 경우, 기본값이 없으면 NOT NULL로 설정된다. 반면, ON인 경우 NULL로 설정된다. 따라서, 이 변수는 데이터 무결성과 호환성에 중요한 영향을 미친다.
MySQL의 TIMESTAMP는 Y2K38 문제에 취약하며, 2038년 이후 시간 오작동 가능성이 있다. 구체적으로, 32비트 정수형으로 시간을 저장하기 때문이다. 따라서, unix_timestamp() 함수 사용 시 주의해야 하며, 데이터 저장 범위를 고려해야 한다.