DB-Spalte vom Typ SMALLINT(5) verändert eingegebene Zahl
Heinz
- datenbank
0 MudGuard0 werbeklaus0 dedlfix
Guten Abend,
ich habe folgendes Problem:
Ich habe eine Spalte in einer DB-Tabelle angelegt, die vom Typ SMALLINT(5) ist.
Wenn ich nun z.B. den Wert "13110" eintrage, wird dieser problemlos übernommen. Wenn ich aber z.B. den Wert "59781" eintrage, wird daraus "32767" gemacht.
Ich dachte die Zahl in Klammern hinter SMALLINT gibt die Höchstanzahl der Stellen in der Spalte an.
Kann mir das jemand erklären?
Danke
Heinz
Hi,
Wenn ich nun z.B. den Wert "13110" eintrage, wird dieser problemlos übernommen. Wenn ich aber z.B. den Wert "59781" eintrage, wird daraus "32767" gemacht.
Ich dachte die Zahl in Klammern hinter SMALLINT gibt die Höchstanzahl der Stellen in der Spalte an.
SMALLINT hat nunmal einen begrenzten Wertebereich (-32768 bis 32767). Der ändert sich auch nicht, wenn Du SMALLINT(20) schreibst.
cu,
Andreas
SMALLINT hat nunmal einen begrenzten Wertebereich (-32768 bis 32767). Der ändert sich auch nicht, wenn Du SMALLINT(20) schreibst.
Und was ändert datentechnisch dann noch die (5) oder (2) oder was weiss ich danach?
echo $begrüßung;
SMALLINT hat nunmal einen begrenzten Wertebereich (-32768 bis 32767). Der ändert sich auch nicht, wenn Du SMALLINT(20) schreibst.
Und was ändert datentechnisch dann noch die (5) oder (2) oder was weiss ich danach?
Nix. Jedenfalls nicht bei numerischen Typen. Man stellt damit nur eine ominöse "maximum display width" ein, von der ich noch nicht herausgefunden habe, an welcher Stelle die zum Tragen kommt.
Zu erwähnen wäre noch das Unsigned-Attribut, das den Wertebereich von "halb Negativ bis halb positiv" nach "0 bis ganz positiv" verschiebt. (siehe range-Angaben im verlinkten Text)
echo "$verabschiedung $name";
Hi dedlfix,
Nix. Jedenfalls nicht bei numerischen Typen. Man stellt damit nur eine ominöse "maximum display width" ein, von der ich noch nicht herausgefunden habe, an welcher Stelle die zum Tragen kommt.
das Wort "maximum" ist hier irgendwie missverständlich, fürchte ich. Die "display width" wird jedenfalls dazu benutzt, Werte bei der Ausgabe auf die gleiche Breite zu bekommen, indem weniger breite Werte links mit einem anderen Wert aufgefüllt werden. Gut zu sehen, wenn man dem Attribut noch die Option ZEROFILL mitgibt.
Gruß,
Andreas.
echo $begrüßung;
Man stellt damit nur eine ominöse "maximum display width" ein, von der ich noch nicht herausgefunden habe, an welcher Stelle die zum Tragen kommt.
das Wort "maximum" ist hier irgendwie missverständlich, fürchte ich.
Das scheint mir auch so, denn alle Ausgaben (getestet mit dem MySQL-Kommandozeilenclient und mit PHP) geben längere Werte komplett aus, ohne sie nach der angegebenen Zeichenanzahl abzuschneiden.
Die "display width" wird jedenfalls dazu benutzt, Werte bei der Ausgabe auf die gleiche Breite zu bekommen, indem weniger breite Werte links mit einem anderen Wert aufgefüllt werden. Gut zu sehen, wenn man dem Attribut noch die Option ZEROFILL mitgibt.
Ahhh, ja. Mit dem Stichwort ZEROFILL hab ich es nun auch im Handbuch gefunden. Zu erwähnen wäre in dem Zusammenhang noch, dass ZEROFILL explizit auch UNSIGNED setzt.
echo "$verabschiedung $name";
hi,
Man stellt damit nur eine ominöse "maximum display width" ein, von der ich noch nicht herausgefunden habe, an welcher Stelle die zum Tragen kommt.
das Wort "maximum" ist hier irgendwie missverständlich, fürchte ich.
Das scheint mir auch so, denn alle Ausgaben (getestet mit dem MySQL-Kommandozeilenclient und mit PHP) geben längere Werte komplett aus, ohne sie nach der angegebenen Zeichenanzahl abzuschneiden.
Ja, das ist genau das definierte Verhalten (Zitat der von dir verlinkten Seite):
"Another extension is supported by MySQL for optionally specifying the display width of an integer value in parentheses following the base keyword for the type (for example, INT(4)). This optional display width specification is used to left-pad the display of values having a width less than the width specified for the column.
The display width does not constrain the range of values that can be stored in the column, nor the number of digits that are displayed for values having a width exceeding that specified for the column."
Von einer "_maximum_ display width" ist hier wie man sieht auch gar nicht die Rede. (Was nicht heißen soll, dass es nicht an anderen Stellen des Manuals fälschlicherweise so sein könnte).
gruß,
wahsaga
echo $begrüßung;
Von einer "_maximum_ display width" ist hier wie man sieht auch gar nicht die Rede. (Was nicht heißen soll, dass es nicht an anderen Stellen des Manuals fälschlicherweise so sein könnte).
Stimmt. Aber ein paar Handbuchseiten-Seiten weiter vorn steht dieses "maximum" geschrieben. (Das war die von mir zuerst verlinkte Seite.)
echo "$verabschiedung $name";