Frage

Ich habe diese Tabelle mit einer int(11) Spalte bekam und Hunderte von Millionen von Zeilen. Wenn ich eine Abfrage wie

SELECT SUM(myIntColumn) as foo FROM myTable;

Der Rückgabewert ist nicht sinnvoll - es ist kleiner als der der größte Maximalwert. Meine Werte für diesen Spalt max irgendwo rund 500 Millionen, und der signed int sollten ~ 2bil zu handhaben können, so nehme ich an mysql einen Integer-Überlauf auftritt, und Keeping Mum über sie.

Was tun?

Sonstiges Details, die vielleicht nur Materie, aber wahrscheinlich nicht:

  • 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
War es hilfreich?

Lösung

Sie können den Bereich verdoppeln, indem Sie den Wert auf einen Wert ohne Vorzeichen Gießen:

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

Es gibt einen größeren Datentyp: die BIGINT, aber leider kann man nicht CAST() zu. Wenn Sie Gebrauch davon machen wollen, müssen Sie Ihre Spalte auf diese Art ändern:

ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top