Fehlersuche beim Programmieren – 2147483647 treibt mich in den Wahnsinn

Manchmal gibt es so kleine Dinge beim Programmieren, die mich in den Wahnsinn treiben können. Ich habe zum Beispiel in der MySQL Datenbank vor Urzeiten mal ein Feld Password genannt, durfte man damals nicht (keine Ahnung, ob es heute geht). Jetzt habe ich einen ähnlichen Fall gehabt, der mich heute Nachmittag auf Trab gehalten hat.


Und zwar habe ich mir eine kleine Anwendung geschrieben, mit der ich die Amazon API anspreche. Und zwar kann man dann, ausgehend von einem Knotenpunkt die Browsernode IDs der Bestsellerlisten ziehen. Ganz praktisch, wenn man sich einen kleinen Kategorien-Baum erstellen lassen möchte. Ich hatte überlegt, dass zum Beispiel für meine neue Kalender Seite zu nutzen.

Also ziehe ich so fleißig vor mich hin, bzw. lasse das den Browser mit Hilfe eines kleinen Javascript-Schnipsels erledigen. Am Ende gucke ich dann aber doch mal in die Datenbank und was sehe ich? Mehrere Einträge haben die gleiche ID erhalten. Was nicht sein kann, denn ich überprüfe das ja vor dem rein schreiben, ob ich die ID nicht schon habe.

Also habe ich in meine Anwendung erstmal jede Menge Echos reingeschrieben. Die Anweisung für das Insert war ok. Vielleicht lag es ja daran, dass ich in ein Datenbankfeld, dass als INT definiert ist, einen Text reinschreiben will? Also die Zahl einfach mal mit 1 multipliziert, hat immer noch nicht geklappt. Ein neues Feld genommen, das als Varchar genommen, damit klappt es. Damit konnte ich aber nicht leben. Ich habe die gesamte Ausgabe mehrfach durchsucht, die Zahl, die statt der eigentlichen Zahl erscheint, steht nirgendwo.

Immerhin, mit dem INT war ich aber auf dem richtigen Dampfer. Und zwar stand überall 2147483647 und das ist wohl die größte Zahl, die in ein mit INT definiertes Datenbankfeld rein darf. Habe ich bestimmt mal vor gefühlt einhundert Jahren gelernt, aber seit dem wohl vergessen. Und da ich die eine oder andere Browsernode ID habe, die über dieser magischen Grenze liegt, hat mir mein Programm daraus dann immer die Zahl gemacht. Argh. Beinahe hätte ich nun Varchar genommen, aber es gibt ja zum Glück noch BIGINT.  Während INT nur 32-bit lang sein kann, sind es bei bigint eben 64 bit.

Wieder was gelernt. Hat mich ja nur eine Stunde Lebenszeit gekostet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.