Länge von Integer-Feldern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Länge von Integer-Feldern

    Hallo zusammen,

    wer kan mir das mal erklären:

    Beim Anlegen eines Integer-Feldes in einer Tabelle gibt es ja verschiedene Längen: tiny INT, smal INT, medium INT, INT etc.

    Ich dachte bislang, die Längenangabe bezieht sich auf die Anzahl der Zeichen. Bei tiny INT mit 4 Zeichen dachte ich, dass alles von 0 bis 9999 möglich ist. Jetzt habe ich aber bemerkt, das mein auto_Increment der ID bei 127 schluss macht.

    Im Handbuch stecht zu den Längen eine Berechnung nach der Bytlänge. Nach den Beispielen zufolge müssten da aber dennoch vier Zeichen möglich sein, also doch bis 9999.
    Vielleich kann mir das mal jemand genauer erklären.

    Danke & Gruß, Andi

  • #2
    Ich dachte bislang, die Längenangabe bezieht sich auf die Anzahl der Zeichen.
    Das ist auch richtig, allerdings bestimmt die Länge nicht automatisch den Maximalwert.
    Der Wertebereich von Tinyint reicht von -128 bis 127 - deshalb kannst du den Maximalwert mit einer Länge von 4 nicht erhöhen. Stellst du als Maximale Länge 2 ein, kannst du den Maximalwert dagegen einschränken. Wenn du nur positive Zahlen benutzt, kannst du einem Feld das Attribut UNSIGNED verleihen, dann erhöht sich der Maximalwert.

    Unter http://www.mysql.com/doc/en/Column_types.html findest du eine Liste der Reichweiten der einzelnen Datentypen.
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Also mit den integern verhält es sich so:
      TINYINT 1 byte
      SMALLINT 2 bytes
      MEDIUMINT 3 bytes
      INT 4 bytes
      INTEGER 4 bytes
      BIGINT 8 bytes

      1 Byte = 8 Bit

      dann ergibt sich aus Basis 2 exponiert mit Anzahl Bits der Wertebereich der Variable.
      zB. Tiny int:
      2 ^8 Bits = 256 --> Zahlen bereich von 0-255 oder -128 bis 127 einschliesslich der 0
      Zuletzt geändert von MelloPie; 30.09.2002, 12:19.
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Seit wann ist denn 8^2 = 256 ?
        Oder habe ich das was falsch verstanden?
        Zuletzt geändert von Troublegum; 30.09.2002, 12:16.
        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

        © Harald Schmidt

        Kommentar


        • #5
          sorry 2^8 meinte ich naja
          Also es ist Basis 2 exponiert mit Anzahl Bits.
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Ah, danke sehr
            [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
            [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
            [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

            © Harald Schmidt

            Kommentar


            • #7
              Wenn ich also mein ID-Feld auf unasigned stelle, reicht meine Zahlenspanne von 0-255 oder wie?

              Aber wieso steht dann im phpMyAdmin hinter tinyint in Klammern 4, bzw. wird das automatisch al Länge eingetragen?

              Um aber tatsächlich bis auf 9999 zu kommen, wie müsste mein Feld dann konfiguriert sein? Als INT? Aber wenn 1 Byte = 256, dann 4 Byte = 1024 oder denke ich da gerade falsch? Muss ich dann 256 hoch 4 rechnen?

              Dann müsste ja smal INT mit 2 bytes langen. 256 hoch 2 = 65536.
              Also kann meine ID dann bis 65536 gehen.

              Oder denke ich da schon wieder falsch.

              Bitte mal bestätigen oder richtigstellen.

              Thanx, Andi

              Kommentar


              • #8
                bei unsigned:

                tiny int = 0 bis 2^8-1 = 255
                small int = 0 bis 2^16-1 = 65535
                int = 0 bis 2^32-1 = ach rechne doch selber

                ergo: small int reicht
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
                  A small integer. The signed range is -32768 to 32767. The unsigned range is 0 to 65535.

                  INT[(M)] [UNSIGNED] [ZEROFILL]
                  A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.

                  Frei nach MelloPie's Rechnung:
                  Smallint: 2^16 = 65536
                  Int: 2^32 = 4294967295
                  [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                  [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                  [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                  © Harald Schmidt

                  Kommentar


                  • #10
                    Original geschrieben von Troublegum

                    Int: 2^32 = 4294967295
                    das geht wohl nicht, eine 2-er Potenz sollte zumindest durch 2 teilbar sein
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      Thanx !

                      Kommentar


                      • #12
                        Jup, ich hab' einfach die Zahl aus dem MySQL Manual kopiert (die haben aber 1 abgezogen, weil ja 0 noch mitzählt).
                        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                        © Harald Schmidt

                        Kommentar


                        • #13
                          Original geschrieben von andik2000
                          Aber wieso steht dann im phpMyAdmin hinter tinyint in Klammern 4, bzw. wird das automatisch al Länge eingetragen?
                          Das bezieht sich vermutlich auf die Länge des längsten (vorzeichenbehafteten) tinyint: -128.
                          mein Sport: mein Frühstück: meine Arbeit:

                          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                          Kommentar


                          • #14
                            Habe ich mir mittlerweile auch fast gedacht.

                            Dann sei euch Allen hiermit mein Dank ausgesprochen.

                            Gruß, Andi

                            Kommentar

                            Lädt...
                            X