11.1.2 날짜 및 시간 형식 개요
시간 데이터 형의 요약 설명합니다. 시간 형의 특성과 스토리지 요구 사항에 대한 자세한 내용은 11.3 절 "날짜 및 시간 형" 과 섹션 11.7 "데이터 타입 스토리지 요구 사항" 을 참조하십시오. 시간 값을 연산하는 함수에 대한 설명은 섹션 12.7 "날짜 및 시간 함수" 를 참조하십시오.
DATE
및 DATETIME
범위의 설명은 "지원되는"는 이전의 값은 작동하지만 보장은 없다는 것을 의미합니다.
MySQL 5.6.4 이후에서는 마이크로 초 (6 자리)까지의 정확도를 가진 TIME
, DATETIME
, 그리고 TIMESTAMP
값의 소수 초에 대응할 수있게되었습니다. 소수 초 부분을 포함 컬럼을 정의하려면
구문을 사용합니다. 여기에서 type_name
( fsp
)type_name
은 TIME
, DATETIME
또는 TIMESTAMP
이며, fsp
는 소수 초 정도입니다. 예 :
CREATE TABLE t1 (t TIME (3) dt DATETIME (6));
fsp
값을 지정하는 경우, 0-6의 범위에 있어야합니다. 0의 값은 소수가 없음을 나타냅니다. 생략하면 기본 정도는 0입니다. (이것은 이전의 MySQL 버전과 호환성을 유지하기 위해 표준 SQL의 기본 인 6과 다릅니다.)
MySQL 5.6.5에는 시간 형의 확장 된 자동 초기화 및 업데이트 기능이 도입되었습니다. 테이블 당 최대 1 개의 컬럼이 아니라 테이블의 모든 TIMESTAMP
컬럼에 이러한 특성을 할당합니다. 또한 이러한 특성은 DATETIME
컬럼으로 사용할 수있게되었습니다.
YEAR(2)
데이터 형식은 사용하기 전에 고려해야 할 특정 문제가 있습니다. MySQL 5.6.6 이후 YEAR(2)
는 비추천입니다. 기존 테이블의 YEAR(2)
컬럼은 이전과 같이 취급되지만 신규 또는 변경된 테이블에서 YEAR(2)
는 YEAR(4)
로 변환됩니다. 자세한 내용은 섹션 11.3.4 "YEAR (2)의 제한 및 YEAR (4)로 전환" 을 참조하십시오.
DATE
날짜입니다. 지원 범위는
'1000-01-01'
에서'9999-12-31'
입니다. MySQL은'YYYY-MM-DD'
형식으로DATE
값을 표시하지만 문자열이나 숫자 중 하나를 사용하여DATE
컬럼에 값 할당을 허용하고 있습니다.DATETIME[(
fsp
)]날짜와 시간의 조합입니다. 지원 범위는
'1000-01-01 00:00:00.000000'
에서'9999-12-31 23:59:59.999999'
입니다. MySQL은'YYYY-MM-DD HH:MM:SS[.fraction]'
형식으로DATETIME
값을 표시하지만 문자열이나 숫자 중 하나를 사용하여DATETIME
컬럼에 값 할당을 허용 있습니다.MySQL 5.6.4 이후에서는 소수 초 정밀도를 지정하기 위해 0-6 범위에서 옵션
fsp
값을 지정할 수 있습니다. 0의 값은 소수가 없음을 나타냅니다. 생략하면 기본 정도는 0입니다.MySQL 5.6.5 이후
DATETIME
컬럼에 대한 자동 초기화 및 현재 날짜와 시간에 자동 업데이트 섹션 11.3.5 "TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능" 에서 설명하고있는 바와 같이,DEFAULT
및ON UPDATE
컬럼 정의 절을 사용하여 지정할 수 있습니다.TIMESTAMP[(
fsp
)]타임 스탬프입니다. 범위는
'1970-01-01 00:00:01.000000'
UTC에서'2038-01-19 03:14:07.999999'
UTC입니다.TIMESTAMP
값은 신기원 ('1970-01-01 00:00:00'
UTC)에서 초로 저장됩니다.TIMESTAMP
는'1970-01-01 00:00:00'
라는 값을 나타낼 수 없습니다. 이것은 신기원으로부터의 초 수가 0 인 것으로 동등 0 값은'0000-00-00 00:00:00'
, 즉 '제로'의TIMESTAMP
값을 나타 내기 위해 예약되어 있기 때문에 입니다.MySQL 5.6.4 이후에서는 소수 초 정밀도를 지정하기 위해 0-6 범위에서 옵션
fsp
값을 지정할 수 있습니다. 0의 값은 소수가 없음을 나타냅니다. 생략하면 기본 정도는 0입니다.서버에서
TIMESTAMP
정의를 어떻게 취급하는지는explicit_defaults_for_timestamp
시스템 변수의 값에 따라 달라집니다 ( 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오). 기본적으로explicit_defaults_for_timestamp
은 무효이며, 서버는 다음과 같이TIMESTAMP
를 취급합니다.특히 지정되어 있지 않은 한, 테이블 내의 최초의
TIMESTAMP
컬럼은 명시 적으로 값을 할당하지 않으면 가장 새로운 변화의 시간에 자동으로 설정되도록 정의되어 있습니다. 이는TIMESTAMP
는INSERT
또는UPDATE
조작의 타임 스탬프의 기록에 도움이됩니다.NULL
값을 허용하도록NULL
속성으로 정의되어 있지 않은 한,NULL
값을 할당하여 모든TIMESTAMP
컬럼을 현재 날짜와 시간을 설정할 수도 있습니다.자동 초기화 및 현재 날짜와 시간에 자동 업데이트는
DEFAULT CURRENT_TIMESTAMP
및ON UPDATE CURRENT_TIMESTAMP
컬럼 정의 절을 사용하여 지정할 수 있습니다. 기본적으로는 전술 한 바와 같이 처음TIMESTAMP
컬럼에이 특성이 포함됩니다. MySQL 5.6.5 이후에서는 테이블의 어떤TIMESTAMP
컬럼에서도 이러한 특성을 할당하도록 정의 할 수 있습니다. 5.6.5 이전에서는 이러한 할당TIMESTAMP
컬럼은 테이블 당 최대 1 개에 한정되지만 첫 번째 컬럼은 억제하고 대신 다른TIMESTAMP
컬럼에 할당 할 수 있습니다. 섹션 11.3.5 "TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능" 을 참조하십시오.explicit_defaults_for_timestamp
가 활성화되면 모든TIMESTAMP
컬럼에DEFAULT CURRENT_TIMESTAMP
또는ON UPDATE CURRENT_TIMESTAMP
속성의 자동 할당되지 않습니다. 이들은 열 정의에 명시 적으로 포함해야합니다. 또한NOT NULL
로 명시 적으로 선언되지 않은 모든TIMESTAMP
는NULL
값을 허용합니다.explicit_defaults_for_timestamp
은 MySQL 5.6.6 이상에서 사용할 수 있습니다. 5.6.6 이전 버전에서는 서버가explicit_defaults_for_timestamp
이 잘못된 경우 설명 된대로TIMESTAMP
를 취급합니다. 이러한 동작은 기본 상태로되어 있지만 비표준이고 5.6.6 이후로는 비추천입니다.explicit_defaults_for_timestamp
을 활성화 한 설치 업그레이드에 대한 설명은 섹션 2.11.1.3 「MySQL 5.5에서 5.6로 업그레이드 " 를 참조하십시오.TIME[(
fsp
)]시간입니다. 범위는
'-838:59:59.000000'
에서'838:59:59.000000'
입니다. MySQL은'HH:MM:SS[.fraction]'
형식으로TIME
값을 표시하지만 문자열이나 숫자 중 하나를 사용하여TIME
컬럼 값에 할당을 허용합니다.MySQL 5.6.4 이후에서는 소수 초 정밀도를 지정하기 위해 0-6 범위에서 옵션
fsp
값을 지정할 수 있습니다. 0의 값은 소수가 없음을 나타냅니다. 생략하면 기본 정도는 0입니다.YEAR[(2|4)]
2 자리 또는 4 자리 형식의 연도입니다. 기본값은 4 자리 형식입니다.
YEAR(2)
와YEAR(4)
는 형식이 다르지만 값의 범위는 동일합니다. 4 자리 형식으로 값은1901
에서2155
과0000
로 표시됩니다. 2 자리 형식으로 값은70
에서69
으로 표시되어 1970에서 2069 년을 나타냅니다. MySQL 그럼,YEAR
값은YYYY
또는YY
형식으로 표시되지만, 문자열 또는 숫자를 사용하여YEAR
컬럼에 값을 할당합니다.참고YEAR(2)
데이터 형식은 사용하기 전에 고려해야 할 특정 문제가 있습니다. MySQL 5.6.6 이후YEAR(2)
는 비추천입니다. 기존 테이블의YEAR(2)
컬럼은 이전과 같이 취급되지만 신규 또는 변경된 테이블에서YEAR(2)
는YEAR(4)
로 변환됩니다. 자세한 내용은 섹션 11.3.4 "YEAR (2)의 제한 및 YEAR (4)로 전환" 을 참조하십시오.입력 값의
YEAR
의 형식 및 해석에 대한 자세한 내용은 섹션 11.3.3 "YEAR 형" 을 참조하십시오.
SUM()
및 AVG()
집계 함수는 시간 값을 취급하지 않습니다. (이러한 값을 숫자로 변환하기 때문에 첫 번째 숫자가 아닌 문자 뒤의 모든 정보가 손실됩니다.)이 문제를 해결하려면 숫자 단위로 변환하여 집계 작업을 수행하고 시간 값으로 되돌립니다. 예 :
SELECT SEC_TO_TIME (SUM (TIME_TO_SEC (time_col
))) FROMtbl_name
; SELECT FROM_DAYS (SUM (TO_DAYS (date_col
))) FROMtbl_name
;
MySQL Server는 MAXDB
SQL 모드를 활성화 할 수 있습니다. 이 경우, TIMESTAMP
는 DATETIME
과 동일합니다. 테이블을 만들 때이 모드가 활성화되어 있다면, TIMESTAMP
컬럼은 DATETIME
컬럼으로 작성됩니다. 그 결과, 이러한 열은 DATETIME
형식이 사용 된 값의 범위는 동일하며 자동 초기화 나 현재 날짜와 시간에 자동으로 업데이트되지 않습니다. 섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.