문제

나는 이 테이블을 가지고 있어요. int(11) 열과 수억 개의 행.다음과 같은 쿼리를 실행하면

SELECT SUM(myIntColumn) as foo FROM myTable;

반환 값은 의미가 없습니다. 단일 최대값보다 작습니다.이 열에 대한 내 값은 약 500m 정도이고 서명된 int는 ~2bil을 처리할 수 있어야 합니다. 따라서 mysql에서 정수 오버플로가 발생하고 이에 대해 침묵하고 있다고 가정합니다.

무엇을 해야 할까요?

중요할 수도 있지만 아닐 수도 있는 기타 세부 사항:

  • mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (x86_64) using readline 5.2
  • mysqld Ver 5.0.75-0ubuntu10 for debian-linux-gnu on x86_64 ((Ubuntu))
  • Linux kona 2.6.28-11-server #42-Ubuntu SMP Fri Apr 17 02:45:36 UTC 2009 x86_64 GNU/Linux
도움이 되었습니까?

해결책

값을 부호 없는 값으로 캐스팅하여 범위를 두 배로 늘릴 수 있습니다.

SELECT SUM(CAST(myIntColumn AS UNSIGNED)) ...

더 큰 데이터 유형이 있습니다.BIGINT이지만 안타깝게도 그럴 수 없습니다. CAST() 그것에.이를 활용하려면 열을 해당 유형으로 변경해야 합니다.

ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top