Verständnisproblem mit MySQL Integer Feld

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich bin heute durch Zufall auf ein merkwürdiges Verhalten eines Integer Feldes gestoßen, das ich nicht kapiere.

In einer Schleife werden neue Datensätze eingetragen, wobei die so aussehen:

...
insert into optionen (artid, gruppe, optionid, text, reihung) values ('10858', '4', '9', 'bla', '9');
insert into optionen (artid, gruppe, optionid, text, reihung) values ('10858', '4', '10', 'bla', '10');
insert into optionen (artid, gruppe, optionid, text, reihung) values ('10858', '4', '11', 'bla', '11');
insert into optionen (artid, gruppe, optionid, text, reihung) values ('10858', '4', '12', 'bla', '12');
...

So weit, so gut. Das Feld "optionid" ist int(3), das Feld "reihung" war int(2). I.d.R. ist optionid immer identisch mit reihung. Die Eintragungen wurden immer alle korrekt ausgeführt, außer bei dem Wert 11. In dem Fall wurde bei reihung immer eine 1 eingetragen. Alle anderen werte, egal ob größer oder kleiner, waren identisch. Erst als ich reihung auf int(3) geändert hatte, wurde auch dort korrekt 11 eingetragen.

Kann mir bitte mal jemand erklären, woher dieses Verhalten kommt? Mir ist das zu hoch.

Danke schon mal,
Sprint
 
Hi

Die geklammerte Nummer bei Int-Spaltentypen hat nichts mit dem Wertebreich zu tun, sondern damit, wie es beim Selecten angezeigt wird (maximae Stellenanzahl).

Direkt erklären kann ich diese Sache aber auch nicht...
 
Hi

Die geklammerte Nummer bei Int-Spaltentypen hat nichts mit dem Wertebreich zu tun, sondern damit, wie es beim Selecten angezeigt wird (maximale Stellenanzahl).

Aber selbst das nicht einmal. Das Feld reihung konnte auch als int(2) schon den Wert 999 korrekt aufnehmen. Größere Werte weiß ich nicht, kommen nicht vor. Es wurden auch immer alle Werte richtig geschrieben, außer 11. :confused:
 
Hm.
(Aufnehmen ja, aber Anzeigen sollte es 999 nicht).
Um welche Version und DB-Engine (myisam, innodb, aria...) geht es denn?
 
Hallo Sprint,
hallo Shell,

die genannte "11" im INT-Typ hat keinerlei Bedeutung, solang Du nicht zusätzlich "ZEROFILL" auswählst.
Ein INT-Typ hat immer eine maximale Range von bis zu 2147483647.

Als Beispiel:

INT(11) ZEROFILL

Trägst Du in das Feld eine 8 ein, werden die fehlenden Stellen mit 0en aufgefüllt => 00000008


Zusatz - EDIT:
Es ist also durchaus möglich in ein INT(1) ein Zahl wie 58353 zu speichern.

Viele Grüße
 
Zurück