TINYINT oder ENUM

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

  • TINYINT oder ENUM

    ...welche der beiden Zellentypen bringt die bessere Performance bzw. ist speicherintensiver? Ist es nur, das man bei ENUM keine > oder < -Abfragen stellen kann, oder gibt es weitere Nachteile von ENUM?

  • #2
    na, was willst du denn drin speichern?

    ich sach mal, der name der Typen sagt eigentlich alles.

    Wenn normaler zahlenwert, dann int
    Wenn ein wert aus ner aufzählung, dasn enum

    Kommentar


    • #3
      Wenn es nur um Ja / Nein geht nehm TinyINT(1)

      Wenn Du alphanum werte hast gehts natürlich nur mit enum

      ENUM ist ein zeichenketten objekt mit begrenzter Gültigkeit , hat also mehr speicherbedarf als ein 8bit integerwert
      chansel0049
      ----------------------------------------------------
      if you've reached the bottomline - dig further!
      Übersetzer gesucht? http://www.babelport.com

      Kommentar


      • #4
        Original geschrieben von chansel0049
        Wenn es nur um Ja / Nein geht nehm TinyINT(1)

        Wenn Du alphanum werte hast gehts natürlich nur mit enum

        ENUM ist ein zeichenketten objekt mit begrenzter Gültigkeit , hat also mehr speicherbedarf als ein 8bit integerwert
        Hmmnn ... würde ich anders sehen ... :

        Ja/Nein ... auf jeden Fall ENUM() ... TINYINT ermöglicht schliesslich 255 Werte ... und nicht 2 ... !

        Alphanum haben letztlich erstmal gar nichts in ENUMS zu suchen (in TINYINT natürlich auch nicht) sondern in CHAR oder VARCHAR ...

        ENUM ist intern keine Zeichenkette ... diese steht nur in der Tabellenbeschreibung ... intern wird's als 1 bzw. 2 Byte Integer verwaltet ... zur Info.

        Ausschlaggebend wären für mich in diesem Falle schlichtweg die Useability ... und die Lesbarkeit von Code und Datenbank ... siehe Punkt 1 (Ja/Nein) ... !
        carpe noctem

        Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
        Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!

        Kommentar


        • #5
          Da meine Werte eh immer in eine Zahl übersetzt werden ist es brauch ich ENUM nicht aufgrund der möglichen alphanummerischen Möglichkeiten.

          Hab mich generell für ENUM entschieden, da dieser Datentyp ja anscheinend für festgelegte Werte geeignet ist. Ausser bei Variablen vo trotz festgelegter Werte eine > oder < Abfrage Sinn macht. Denke mal da ist die Performance besser (ohne es getestet zu haben). Von der Speicherintensität scheint sich da übrigens nix zu tun.

          Kommentar


          • #6
            Nu schaue mal guck!

            Da les ich doch gleich mal nach!
            chansel0049
            ----------------------------------------------------
            if you've reached the bottomline - dig further!
            Übersetzer gesucht? http://www.babelport.com

            Kommentar


            • #7
              Wo wir gerade bei Ja/Nein Feldern und Tinyint() sind, mir ist da was sehr
              komisches aufgefallen!

              Und zwar habe ich in einer Tablle ein Feld mit:

              nr1 = tinyint(4)
              nr2 = tinyint(1)

              Jetzt habe ich mal versucht, welches die größte Zahl ist, die ich in den
              beiden Feldern speichern kann. Was schätzt ihr denn, was das Ergebnis
              war?!

              In BEIDEN FELDERN 127!

              Das versteh ich absolut nicht! Was gibt denn die (4) an? Vier Stellen einer
              Zahl (also max. 9999) wie beim String? Kann nicht sein! Aber vier Bytes
              können es auch nicht sein. Aufgefallen ist mir, das die 127 genau dem
              Ergebnis entspricht, wenn man die Zahlen 2^0 bis 2^6 zusammenzählt.
              (1 + 2 + 4 + 8 + 16 + 32 + 64 = 127) Hat das damit etwas zu tun?

              PS: MySQL5, verwaltung mit PHPmyAdmin
              GLORIA PERPETUA

              Kommentar


              • #8
                Original geschrieben von deklarmart
                Was schätzt ihr denn, was das Ergebnis
                war?!

                In BEIDEN FELDERN 127!
                Natürlich, TINYINT ist TINYINT.
                Das versteh ich absolut nicht! Was gibt denn die (4) an?
                Display Width, http://dev.mysql.com/doc/refman/4.1/...-overview.html
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  OK, die sagen "M zeigt die maximale Anzeigebreite an." Und was heißt das jetzt?
                  Wenn Tinyint immer max. 255 speichern kann, egal ob ich (1) oder (4) nehme,
                  worin unterscheidt sich das Feld dann? Wo genau sehe ich einen Unterschied?!

                  Ich habe das immer so verstanden, das M genau wie bei Varchar(30)
                  die max. speicherbare Länge auf 30 Bytes festlegt...

                  GLORIA PERPETUA

                  Kommentar


                  • #10
                    Da wird's noch mal deutlicher beschrieben: http://dev.mysql.com/doc/refman/4.1/...ric-types.html
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      OK, danke, die Bedeutung habe ich nun verstanden. Aber denn Sinn nicht!
                      Diese optionale Angabe der Anzeigebreite wird verwendet, um die Anzeige von Werten, die eine geringere als die für die Spalte festgelegte Breite aufweisen, nach links mit Leerzeichen aufzufüllen.
                      Warum das denn??? Wenn ich ein INT habe, dann soll das auch ein INT sein,
                      und nicht in irgendeiner Anzeige mit Leerzeichen gefüllt werden! OK, MySQL
                      entfernt die Leerzeichen anscheinend bei der Abfrage, aber wozu werden
                      die dann überhaupt eingefügt? Ich stell mich mal ganz dumm: "in der Anzeige
                      von PHPmyAdmin sehe ich keine Leerzeichen bei INT Zahlen!" Auf was
                      für eine Anzeige bezieht sich das also?
                      GLORIA PERPETUA

                      Kommentar


                      • #12
                        Selbst wenn das mit den Leerzeichen nicht so einleuchtend sein sollte - bzgl. ZEROFILL sollte es das doch aber sein?

                        Btw, in diesem Zusammehang: Vielleicht könntest du dir mal angewöhnen, von verlinkten Dokumenten etwas mehr als nur die Einleitung und erste Absätze zu lesen, ja? Danke.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Nur zu Anmerkung, man kann auch mit enum numerische Werte speichern/lesen:

                          enum('nein','ja')

                          Code:
                          SELECT enum_spalte+0 FROM tab1 //ergibt z.B. 'nein'
                          
                          INSERT INTO tab1 SET enum_spalte = 1 //ist das gleiche wie:
                          INSERT INTO tab1 SET enum_spalte = 'ja'
                          Damit verhält sich enum genau wie ein Array in PHP.

                          Kommentar

                          Lädt...
                          X