Eddie: Verständnisfrage: was bedeutet smallint(5)?

Hallo allerseits,

jetzt bastel ich schon ewig mit MySQL rum, bin mir aber gerade garnicht sicher, ob ich das die ganze Zeit falsch verstanden habe:

Daten vom Typ SMALLINT haben ja normalerweise einen Datenbereich von (2^16)+1 bis 2^16 (also insg. maximal 65.000).
Was erreiche ich dann mit SMALLINT(5)? Die MySQL-Referenz ist da fuer nicht Englischsprachler etwas kryptisch :-(

SMALLINT(5) steht in meiner Datenbank, und irgendwas muss ich mir ja dabei vor 2 Jahren gedacht haben...

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. Hallo Eddie,

    Was erreiche ich dann mit SMALLINT(5)? Die MySQL-Referenz ist da fuer nicht Englischsprachler etwas kryptisch :-(

    Hmm. http://dev.mysql.com/doc/mysql/de/numeric-types.html lesen und verstehen - ist sogar auf deutsch... ;-)

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
  2. echo $begrüßung;

    Daten vom Typ SMALLINT haben ja normalerweise einen Datenbereich von (2^16)+1 bis 2^16 (also insg. maximal 65.000).

    -2^15 bis 2^15-1 und 65536 wären richtig gewesen.

    Was erreiche ich dann mit SMALLINT(5)?

    Normalerweise werden maximal 6 Stellen zur Anzeige benötigt. Eine für das Minus und fünf für die Ziffern. Die Zahl in Klammern ist die "maximum display size". An der für die Speicherung benötigen Anzahl Bytes (zwei) ändert sich bei smallint nichts.

    SMALLINT(5) steht in meiner Datenbank, und irgendwas muss ich mir ja dabei vor 2 Jahren gedacht haben...

    Durch die 5 gibst du also an, dass nur 5 Zeichen von rechts dargestellt werden sollen.

    echo "$verabschiedung $name";

    1. hi,

      Durch die 5 gibst du also an, dass nur 5 Zeichen von rechts dargestellt werden sollen.

      nein, siehe link von Marc.

      "Die optionale Breitenspezifizierung wird benutzt, um die Anzeige von Werten, deren Breite geringer ist als für die Spalte festgelegt, linksseitig mit Leerzeichen aufzufüllen. Das begrenzt allerdings nicht den Wertebereich, der in der Spalte gespeichert werden kann, noch die Anzahl von Ziffern, die bei Werten angezeigt werden, die die angegebene Breite für die Spalte überschreiten."

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. echo $begrüßung;

        Durch die 5 gibst du also an, dass nur 5 Zeichen von rechts dargestellt werden sollen.

        "Die optionale Breitenspezifizierung wird benutzt, um die Anzeige von Werten, deren Breite geringer ist als für die Spalte festgelegt, linksseitig mit Leerzeichen aufzufüllen. [...]"

        Aha, dann beißt sich diese Aussage aber mit http://dev.mysql.com/doc/mysql/en/numeric-type-overview.html (oder auf deutsch: http://dev.mysql.com/doc/mysql/de/column-types.html)

        "M indicates the maximum display width."
        ...
        SMALLINT[(M)] ...

        echo "$verabschiedung $name";

        1. hi,

          Aha, dann beißt sich diese Aussage aber mit http://dev.mysql.com/doc/mysql/en/numeric-type-overview.html (oder auf deutsch: http://dev.mysql.com/doc/mysql/de/column-types.html)

          "M indicates the maximum display width."

          Der folgende Satz relativiert dies aber schon wieder:

          "The maximum legal display width is 255. Display width is unrelated to the storage size or range of values a type can contain, as described in Section 11.2, “Numeric Types”.

          Und dort wiederum steht
          "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."

          Das "Maximum" in Bezug auf die display width würde ich also wie folgt interpretieren:

          int(5) gibt an, dass du auf maximal fünf Stellen mit Spaces (bzw. Nullen bei zerofill) auffüllen willst. "Längere" Feldinhalte berührt dies jedoch nicht.

          Bei Datensätzen mit den Werten 123, 4567 und 123456789 in einer INT(5)-Spalte mit dem Attribut zerofill würdest du also folgende Werte zurückgeliefert bekommen:

          00123
          04567
          123456789

          Das Auffüllen mit führenden Nullen wird also bis zum "Maximum" von fünf Stellen insgesamt gemacht.
          Nur, weil der letzte Wert neun Stellen hat, werden deshalb nicht alle anderen Werte ebenfalls auf neun Stellen aufgefüllt.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }