Loading...
MySQL 9.5 Reference Manual 9.5의 13.2.2 The DATE, DATETIME, and TIMESTAMP Types의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
DATE, DATETIME, TIMESTAMP 타입는 서로 관련이 있습니다. 이 절에서는 이들의 특성, 서로 비슷한 점과 다른 점을 설명합니다. MySQL은 Section 11.1.3, “Date and Time Literals”에서 설명하는 여러 형식의 DATE, DATETIME, TIMESTAMP 값을 인식합니다. DATE 및 DATETIME 범위 설명에서 “supported”란 더 이른 값이 동작할 수도 있으나, 이에 대해 보장하지 않는다는 의미입니다.
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자리) 정밀도의 끝부분 분수 초 부분이 포함될 수 있습니다. 특히, DATETIME 또는 TIMESTAMP 컬럼에 삽입되는 값에 분수 부분이 있으면 버려지지 않고 저장됩니다. 분수 부분이 포함되면 이러한 값의 형식은 'YYYY-MM-DD hh:mm:ss[.fraction]'이며, DATETIME 값의 범위는 '1000-01-01 00:00:00.000000'부터 '9999-12-31 23:59:59.499999'까지이고, TIMESTAMP 값의 범위는 '1970-01-01 00:00:01.000000'부터 '2038-01-19 03:14:07.499999'까지입니다. 분수 부분은 항상 소수점으로 시간의 나머지 부분과 구분되어야 합니다. 다른 분수 초 구분자는 인식되지 않습니다. MySQL에서 분수 초 지원에 대한 정보는 Section 13.2.6, “Fractional Seconds in Time Values”를 참조하십시오.
TIMESTAMP 및 DATETIME 데이터 타입은 현재 날짜와 시간으로의 자동 초기화 및 갱신을 제공합니다. 자세한 내용은 Section 13.2.5, “Automatic Initialization and Updating for TIMESTAMP and DATETIME”을 참조하십시오.
MySQL은 저장 시 TIMESTAMP 값을 현재 시간대에서 UTC로 변환하고, 조회 시 UTC에서 현재 시간대로 다시 변환합니다. (이는 DATETIME과 같은 다른 타입에는 적용되지 않습니다.) 기본적으로 각 커넥션의 현재 시간대는 서버의 시간입니다. 시간대는 커넥션 단위로 설정할 수 있습니다. 시간대 설정이 일정하게 유지되는 한 저장한 것과 같은 값을 다시 얻게 됩니다. TIMESTAMP 값을 저장한 다음 시간대를 변경하고 그 값을 조회하면, 조회된 값은 저장한 값과 달라집니다. 이는 양방향 변환에 동일한 시간대가 사용되지 않았기 때문에 발생합니다. 현재 시간대는 time_zone 시스템 변수의 값으로 제공됩니다. 자세한 내용은 Section 7.1.15, “MySQL Server Time Zone Support”를 참조하십시오.
테이블에 TIMESTAMP 또는 DATETIME 값을 삽입할 때 시간대 오프셋을 지정할 수 있습니다. 자세한 정보와 예시는 Section 11.1.3, “Date and Time Literals”를 참조하십시오.
유효하지 않은 DATE, DATETIME, TIMESTAMP 값은 SQL 모드가 이러한 변환을 허용하는 경우 해당 타입의 “zero” 값('0000-00-00' 또는 '0000-00-00 00:00:00')으로 변환됩니다. 정확한 동작은 strict SQL 모드와 NO_ZERO_DATE SQL 모드 중 어떤 것이 활성화되어 있는지에 따라 달라집니다. Section 7.1.11, “Server SQL Modes”를 참조하십시오.
조회 시 CAST()와 AT TIME ZONE 연산자를 사용하여 TIMESTAMP 값을 UTC DATETIME 값으로 변환할 수 있습니다. 예시는 다음과 같습니다:
1mysql> SELECT col, 2 > CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut 3 > FROM ts ORDER BY id; 4+---------------------+---------------------+ 5| col | ut | 6+---------------------+---------------------+ 7| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 | 8| 2019-12-31 23:40:10 | 2020-01-01 04:40:10 | 9| 2020-01-01 13:10:10 | 2020-01-01 18:10:10 | 10| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 | 11| 2020-01-01 04:40:10 | 2020-01-01 09:40:10 | 12| 2020-01-01 18:10:10 | 2020-01-01 23:10:10 | 13+---------------------+---------------------+
문법와 추가 예시에 대한 전체 정보는 CAST() 함수 설명을 참조하십시오.
MySQL에서 날짜 값 해석과 관련된 몇 가지 속성에 유의하십시오:
MySQL은 문자열로 지정된 값에 대해, 날짜 부분 또는 시간 부분 사이의 구분자로 임의의 구두점 문자를 사용할 수 있는 “relaxed” 형식을 허용합니다. 어떤 경우에는 이 문법가 혼동을 줄 수 있습니다. 예를 들어, '10:11:12'와 같은 값은 : 때문에 시간 값처럼 보일 수 있지만, 날짜 컨텍스트에서 사용되면 연도 '2010-11-12'로 해석됩니다. 값 '10:45:15'는 '45'가 유효한 월이 아니므로 '0000-00-00'으로 변환됩니다.
날짜 부분과 시간 부분 사이, 그리고 분수 초 부분 사이에서 인식되는 유일한 구분자는 소수점입니다.
서버는 월과 일 값이 단지 각각 1에서 12, 1에서 31 범위에 있는 것만이 아니라 실제로 유효할 것을 요구합니다. strict 모드가 비활성화된 경우, '2004-04-31'과 같은 유효하지 않은 날짜는 '0000-00-00'으로 변환되고 경고가 발생합니다. strict 모드가 활성화된 경우, 유효하지 않은 날짜는 에러를 발생시킵니다. 이러한 날짜를 허용하려면 ALLOW_INVALID_DATES를 활성화하십시오. 자세한 내용은 Section 7.1.11, “Server SQL Modes”를 참조하십시오.
MySQL은 일 또는 월 컬럼에 zero가 포함된 TIMESTAMP 값이나 유효한 날짜가 아닌 값을 허용하지 않습니다. 이 규칙의 유일한 예외는 SQL 모드가 이 값을 허용하는 경우의 특수 “zero” 값 '0000-00-00 00:00:00'입니다. 정확한 동작은 strict SQL 모드와 NO_ZERO_DATE SQL 모드 중 어떤 것이 활성화되어 있는지에 따라 달라집니다. Section 7.1.11, “Server SQL Modes”를 참조하십시오.
2자리 연도 값을 포함하는 날짜는 세기가 알려져 있지 않기 때문에 모호합니다. MySQL은 다음 규칙을 사용하여 2자리 연도 값을 해석합니다:
00-69 범위의 연도 값은 2000-2069가 됩니다.
70-99 범위의 연도 값은 1970-1999가 됩니다.
또한 Section 13.2.9, “2-Digit Years in Dates”도 참조하십시오.
13.2.1 Date and Time Data Type Syntax
13.2.3 The TIME Type