11.3.1 DATE, DATETIME, 그리고 TIMESTAMP 형
DATE
, DATETIME
, 그리고 TIMESTAMP
형은 관련이 있습니다. 이 섹션에서는 이러한 특징 닮은 점과 다른 점을 설명합니다. MySQL은 섹션 9.1.3 "날짜 리터럴과 시간 리터럴" 에서 설명하고있는 여러 형식으로 DATE
, DATETIME
, 그리고 TIMESTAMP
값을 인식합니다. DATE
및 DATETIME
범위의 설명은 "지원되는"는 이전의 값은 작동하지만 보장은 없다는 것을 의미합니다.
DATE
타입은 날짜 부분을 포함하지만 시간 부분은 포함하지 않는 값으로 사용됩니다. MySQL 그럼, DATE
값의 취득과 표시는 'YYYY-MM-DD'
형식으로 진행됩니다. 지원 범위는 '1000-01-01'
에서 '9999-12-31'
입니다.
DATETIME
타입은 날짜와 시간의 두 부분을 포함 값으로 사용됩니다. MySQL에서 DATETIME
값의 취득과 표시는 'YYYY-MM-DD HH:MM:SS'
형식으로 진행됩니다. 지원 범위는 '1000-01-01 00:00:00'
에서 '9999-12-31 23:59:59'
입니다.
TIMESTAMP
데이터 타입은 날짜와 시간의 두 부분을 포함 값으로 사용됩니다. TIMESTAMP
는 '1970-01-01 00:00:01'
UTC에서 '2038-01-19 03:14:07'
UTC의 범위가 있습니다.
DATETIME
또는 TIMESTAMP
값은 마이크로 초 (6 자리)까지의 정밀도로 후속 소수 초 부분을 포함 할 수 있습니다. 특히, MySQL 5.6.4 이후에서는 DATETIME
또는 TIMESTAMP
컬럼에 삽입 된 값의 소수부는 모두 파기되지 않고 저장됩니다. 소수가 포함되는 경우,이 값의 형식은 'YYYY-MM-DD HH:MM:SS[.fraction]'
이며, DATETIME
값의 범위는 '1000-01-01 00:00:00.000000'
에서 '9999-12-31 23:59:59.999999'
이며, TIMESTAMP
값의 범위는 '1970-01-01 00:00:01.000000'
에서 '2038-01-19 03:14:07.999999'
입니다. 소수는 항상 시간의 나머지 부분에서 소수점으로 구분해야합니다. 이외의 소수 초 단락 문자는 인식되지 않습니다. MySQL의 소수 초 지원 자세한 내용은 섹션 11.3.6 "시간 값의 소수 초" 를 참조하십시오.
TIMESTAMP
및 (MySQL 5.6.5 이후) DATETIME
데이터 형식은 자동 초기화 및 현재 날짜 및 시간에 자동 업데이트 기능이 포함되어 있습니다. 자세한 내용은 섹션 11.3.5 "TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능" 을 참조하십시오.
MySQL은 TIMESTAMP
값을 저장에서는 현재의 시간대를 UTC로 변환하여 취득은 UTC에서 현재의 시간대로 되돌립니다. ( DATETIME
등의 다른 형태에서는이되지 않습니다.) 기본적으로 각 연결의 현재 시간대는 서버의 시간입니다. 시간대는 연결마다 설정할 수 있습니다. 시간대 설정이 일정하면 저장 한 값과 동일한 값으로 되돌릴 수 있습니다. TIMESTAMP
값을 저장 한 후에 시간대를 변경하여 값을 빼면 꺼내 진 값은 저장 한 값과는 다릅니다. 이는 같은 시간대가 양방향으로 변환하는 데 사용되지 않았기 때문에 발생합니다. 현재 시간대는 time_zone
시스템 변수의 값으로 사용할 수 있습니다. 자세한 내용은 섹션 10.6 "MySQL Server에서 시간대 지원" 을 참조하십시오.
잘못된 DATE
, DATETIME
또는 TIMESTAMP
값은 적절한 형태의 '제로'값 ( '0000-00-00'
또는 '0000-00-00 00:00:00'
)로 변환됩니다.
MySQL은 날짜 값 해석의 특정 프로퍼티에주의하십시오.
MySQL은 문자열로 지정된 값에 "느슨한"형식을 사용할 수 있으며이 형식은 어떤 구두점 문자도 날짜 부분과 시간 부분 구분 기호로 사용할 수 있습니다. 경우에 따라이 구문은 거짓이 될 수 있습니다. 예를 들어,
'10:11:12'
등의 값은 ":
"구분자를 위해 시간 값처럼 보일 수 있지만, 날짜의 컨텍스트에서 사용 된 경우,'2010-11-12'
년으로 해석됩니다. 값'10:45:15'
는'45'
이 유효한 달이 아니기 때문에'0000-00-00'
으로 변환됩니다.날짜 및 시간 부분과 소수 초 부분 사이의 구분 기호로 인식되는 유일한 문자가 소수점입니다.
서버는 달과 날의 값이 각각 1에서 12로 1부터 31의 범위 내에있을뿐만 아니라 유효해야합니다. 엄격 모드가 비활성화되어 있으면,
'2004-04-31'
과 같은 잘못된 날짜는'0000-00-00'
로 변환되고 경고 메시지가 표시됩니다. 엄격 모드가 활성화되면 잘못된 날짜가 오류가 발생합니다. 이러한 날짜를 허용하려면ALLOW_INVALID_DATES
을 사용합니다. 자세한 내용은 섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.MySQL은 날짜 또는 월 컬럼에 제로를 포함한
TIMESTAMP
값이나 잘못된 날짜 값을 허용하지 않습니다. 이 규칙에 대한 유일한 예외는 특수 '제로'치인'0000-00-00 00:00:00'
입니다.MySQL 5.6.4 이전 버전에서는 테이블에서 선택하지 않는 경우,
CAST()
는TIMESTAMP
값을 문자열로 취급합니다. (이것은FROM DUAL
을 지정한 경우에도 마찬가지입니다.) 섹션 12.10 「캐스트 함수 및 연산자 " 를 참조하십시오.두 자리 연도를 포함한 날짜 값은 세기가 알 수 없기 때문에 모호합니다. MySQL은 다음 규칙을 사용하여 2 자리 연도 값을 해석합니다.
00-69
범위의 값은2000-2069
로 변환됩니다.70-99
범위의 값은1970-1999
로 변환됩니다.
섹션 11.3.8 "날짜에서 2 자리 연도" 를 참조하십시오.
MySQL Server는 MAXDB
SQL 모드를 활성화 할 수 있습니다. 이 경우, TIMESTAMP
는 DATETIME
과 동일합니다. 테이블 생성시이 모드가 활성화되어있는 경우, TIMESTAMP
컬럼은 DATETIME
컬럼으로 작성됩니다. 따라서 이러한 컬럼은 DATETIME
형식을 사용하여 동일한 범위의 값을 가지며, 자동 초기화 기능과 현재의 날짜와 시간에 자동으로 업데이트하는 기능은 없습니다. 섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.