11.3.6 시간 값의 소수 초
MySQL 5.6.4 이전 버전에서는 기간 값을 소수 초 부분이 허용되는 인스턴스는 제한되어 있습니다. 후속 소수 리터럴 값 등의 컨텍스트에서 허용되는 일부 시간 함수의 인수 또는 거기에서 반환 값으로 허용되어 있습니다. 예 :
mysql>
SELECT MICROSECOND('2010-12-10 14:12:09.019473');+-------------------------------------------+ | MICROSECOND('2010-12-10 14:12:09.019473') | +-------------------------------------------+ | 19473 | +-------------------------------------------+
그러나 MySQL은 시간 데이터 유형의 컬럼에 값을 저장하면 소수부를 파기하고 그것을 저장하지 않습니다.
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과 다릅니다.)소수 초 부분을 가진
TIME,DATE또는TIMESTAMP값을 같은 형태의 컬럼에 삽입하지만, 소수 자릿수가 적은 경우, 다음의 예와 같이 반올림이 이루어집니다.mysql>
CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );Query OK, 0 rows affected (0.33 sec) mysql>INSERT INTO fractest VALUES>('17:51:04.777', '2014-09-08 17:51:04.777', '2014-09-08 17:51:04.777');Query OK, 1 row affected (0.03 sec) mysql>SELECT * FROM fractest;+-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.78 | 2014-09-08 17:51:04.78 | 2014-09-08 17:51:04.78 | +-------------+------------------------+------------------------+ 1 row in set (0.00 sec)이러한 반올림했을 때에 경고 나 오류가 표시되지 않습니다. 이 동작은 SQL 표준에 따라 서버
sql_mode설정의 영향을받지 않습니다.시간 인수를 취하는 함수는 초 부분을 포함한 값을 받아들입니다. 시간 함수의 반환 값은 필요에 따라 소수 초이 포함됩니다. 예를 들어, 인수없이
NOW()는 소수 부분이없는 현재의 날짜와 시간을 반환하지만 0-6의 옵션 인수를 가지고 그 자리수의 소수 초 부분이 반환 값에 포함되어있는 수를 지정합니다.시간 리터럴 구문은
DATE ',str'TIME '및str'TIMESTAMP '시간 값과 ODBC 구문 동등한 값을 얻을 수 있습니다. 지정되는 경우 결과 값은 후속 소수 초 부분이 포함됩니다. 이전에는 시간 형 키워드는 무시되고 이러한 구조는 문자열 값을 생성하고있었습니다. 표준 SQL과 ODBC 날짜 및 시간 리터럴 을 참조하십시오.str'
경우에 따라서는 이전에 받아 들여지고 구문이 다른 결과를 생성 할 수 있습니다. 다음 항목은 문제를 해결하기 위해 기존 코드의 어느 부분을 변경해야하는 여부를 나타냅니다.
행사 기간 동안 이전의 결과와는 다른 결과를 생성하는 것이 있습니다. 예 :
timestamp시스템 변수는 정수가 아닌 마이크로 초 소수가 포함 된 값을 반환합니다. 현재 시간을 포함하는 결과를 반환하는 함수 (CURTIME(),SYSDATE(),UTC_TIMESTAMP()등)는fsp값으로 인수를 해석하고, 반환 값은 그 자리의 소수 초 부분이 포함됩니다. 이전에는 이러한 함수는 인수를 허용하지했지만 무시하고있었습니다.TIME값은 현재 날짜에 시간을 추가함으로써DATETIME으로 변환됩니다. (이것은 시간 값이'00:00:00'에서'23:59:59'의 범위를 벗어난 경우, 결과의 날짜 부분이 현재의 날짜와 다르다는 것을 의미합니다.) 이전에 은TIME값의DATETIME으로 변환 신뢰성이 없습니다. 섹션 11.3.7 "날짜 및 시간 형식 간의 변환" 을 참조하십시오.TIMESTAMP(은 이전 MySQL 버전에서 허용되고 있었지만,N)N은 소수 초 정도가 아니라 표시 폭이었습니다. 이 동작의 지원은 MySQL 5.5.3에서 폐지 되었기 때문에 비교적 최신 상태로 유지되고있는 어플리케이션이면이 문제의 영향을받지 않습니다. 그렇지 않으면이 코드를 다시 작성해야합니다.