2013-07-08 3 views
1

두 개의 다른 MySQL 서버에서 다음 SELECT 문을 실행했습니다.SEC_TO_TIME results incorrect

SELECT SEC_TO_TIME(7124718) 

의 MySQL 5.1.69는 838을 반환 : 59 : 59 (잘못된)

의 MySQL 5.0.22 반환 1979 : 05 :

내가 대해 TIME 데이터 유형에 대한 문서를 발견 (올바른) (18) 59 : 59-838 : 59 : -838에서 제한을 언급 버전 5.1 (59)

http://dev.mysql.com/doc/refman/5.1/en/time.html

5.0 문서는 TIME 데이터 유형에 동일한 제한을 말한다.

http://dev.mysql.com/doc/refman/5.0/en/time.html

는 사람이 되거 수 있습니까?

+1

혼란 스러움을 이해하지 못합니다. 문서가 귀하의 질문에 적절하게 대처합니다. '838 : 59 : 59'는 문서에 따라'TIME' 데이터 타입의 상한값입니다. – BLaZuRE

+0

무엇이 당신의 질문입니까? 5.1에서 작동하고있는 방식으로 작동합니다. 큰 법적 값은 838 : 59 : 59로 잘립니다. –

+0

5.0에도 같은 제한이 있지만, MySQL 5.0.22에서 얻은 결과는 1979입니다. 05 : 18 – unu

답변

2

분명히 이것은 MySQL의 버그 (구현 또는 설명서 중 하나)였습니다. 버그 신고는 here입니다. 그것은 4.1.23, 5.0.30 및 5.1.13까지 존재했습니다. 해당 버전까지 SEC_TO_TIME()은 클립되지 않습니다 (위에서 언급 한 범위로 제한). 변경 로그에서이 버전에서 :

입력 및 출력 시간 값의 유효성

부족 여러 문제 결과 : 서브 쿼리 내의 SEC_TO_TIME()을 잘못 큰 값 잘린; SEC_TO_TIME()은 BIGINT UNSIGNED 값을 부호로 처리했습니다. 잘림 경고와 범위를 벗어나는 TIME 값이 모두 발생하면 잘림 경고 만 생성되었습니다.

가능한 경우 최신 버전의 MySQL을 사용하십시오. 버그 수정 외에도 시스템에 필요한 보안 수정 사항이 있습니다.