BIGINT UNSIGNED 값이 범위를 벗어났습니다.
오류가 발생했습니다.
BIGINT UNSIGNED 값이 '(1301980250 -) 범위를 벗어났습니다.
mydb
.news_articles
.date
)'
쿼리를 실행할 때
SELECT *, ((1 / log(1301980250 - date)) * 175) as weight FROM news_articles ORDER BY weight;
ORDER BY 조건을 제거하면 오류도 제거됩니다.어떻게 고칠 수 있습니까?
업데이트: 날짜 필드에는 unix 타임스탬프(예: 1298944082)가 포함되어 있습니다.MySQL을 5.0.x에서 5.5.x로 업그레이드한 후 오류가 나타나기 시작했습니다.
도와드릴까요?
저는 최근에 이것과 마주쳤고 서명되지 않은 모든 의미를 서명된 것으로 간단히 캐스팅할 수 있는 가장 합리적인 해결책을 찾았습니다.
SELECT *, ((1 / log(1301980250 - cast(date as signed)) * 175) as weight FROM news_articles ORDER BY weight
이 문제는 월릭이 제안한 대로 서명되지 않은 정수 오버플로로 인해 발생했습니다.으로 해결할 수 있습니다.
- 사용.
SELECT *, ((1 / log((date - 1301980250) * -1)) * 175) as weight FROM news_articles ORDER BY weight;
(이것은 나에게 효과가 있었습니다)' - my.cnf의 sql_mode 매개 변수를 다음으로 변경하는 중
NO_UNSIGNED_SUBTRACTION
(확인하지 않음)
데이터의 null로 인해 발생할 수 있습니다.
IFNULL을 사용하여 기본값을 설정합니다(타임스탬프의 경우 0은 기본값이 불량하며 이 경우 WHERE 절에서 날짜와 null 날짜를 제외하는 것이 더 나을 수 있습니다.
SELECT (123456 - IFNULL(date, 0)) AS leVar
2011-04-04 22:10:50 PDT(2011-04-05 05:10:50 utc) 이후의 날짜 값은 식이 음수가 되므로 이 오류가 발생합니다.
log() 함수가 완전히 긍정적인 인수에 대해서만 정의된다는 것은 아무도 언급하지 않았습니다.log()의 내부에서 뺄셈을 사용할 때 주의하십시오.
원래 질문의 경우, 해결의 핵심 요소는 날짜 열에 대한 데이터 유형을 알려주는 것이었습니다.UNSIGNED이면 MySQL이 좋아하지 않을 수 있습니다.
규칙은 MySQL의 산술 알고리즘이 나쁘고, A가 B와 B > A보다 작은 바이트로 코딩되었을 때 다른 A(= do A-B)에서 피연산자 B를 빼는 방법을 알아낼 수 없다는 것입니다.
예: A = 12이고 SMALLINT, B = 13 ASINT, 그러면 MySQL은 A-B가 무엇인지 알 수 없습니다(-1!).
MySQL 콘텐츠를 만들려면 피연산자 A의 코딩 길이를 확장하면 됩니다. 어떻게 해야 할까요?CAST()를 사용하거나 A에 소수점을 곱합니다.
보다시피 MySQL의 산술에서 부호를 처리하는 문제라기보다는 오버플로의 문제입니다.마이크로프로세서나 더 나은 인간은 이런 종류의 연산을 수행하는 데 아무런 문제가 없습니다.
CAST()를 사용하는 것이 피연산자 A에 1(또는 1.0)을 곱하여 암시적 캐스팅을 유발하는 방법입니다.
예
1.*A - B
아마도 당신은 사용할 수 있습니다.cast
SELECT *, ((1 / log(1301980250 - cast(date AS SIGNED))) * 175) as weight FROM news_articles ORDER BY weight;
결과가 0 미만인 필드를 업데이트하는 중에 이 문제를 발견했습니다.
솔루션:서명되지 않은 필드에서 결과가 0보다 작은 업데이트가 없는지 확인합니다.
언급URL : https://stackoverflow.com/questions/5605085/bigint-unsigned-value-is-out-of-range
'programing' 카테고리의 다른 글
cmake를 연결할 수 없기 때문에 mariadb를 설치할 수 없습니다. (0) | 2023.08.02 |
---|---|
PowerShell 4.0을 사용하여 변수 입력에서 공백 제거 (0) | 2023.08.02 |
NPM: "npm link" 모듈을 찾을 수 없는 경우 (0) | 2023.08.02 |
Angular 6 Unit Tests: All\nReferenceError: 뒤에 오류가 발생했습니다.변수를 찾을 수 없음: $가 던져졌습니다. (0) | 2023.08.02 |
Swift에서 장치 방향 가져오기 (0) | 2023.08.02 |