MySQL: enum oder char?

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

  • MySQL: enum oder char?

    Ich will in MySQL einen Binary-Datentyp verwenden, die Feldinhalte sollen also die Werte "0" und "1" annehmen können. Ich habe dabei verschiedene Empfehlungen gelesen. Danach könnte ich entweder

    id ENUM('0','1') NOT NULL

    oder

    id CHAR(1) [BINARY] NOT NULL

    verwenden.
    Im MySQL-Referenz-Handbuch schlagen sie CHAR vor, das würde wohl Falscheingaben nicht verhindern und würde ein Byte beanspruchen. Falscheingaben könnte man aber suchen.

    Unter folgendem Link
    ( ganz unten auf der Seite) schlagen Sie ENUM vor. Würde wohl auch ein Byte beanspruchen. Könnte theoretisch Falscheingaben verhindern, wenn der Fehlerwert (bei Falschenigabe) nicht eine leere Zeichenkette mit dem numerischen Wert 0 wäre...man kann - soweit ich das verstehe - die Falscheingabe auch nicht aufspüren. Nach was sollte man schliesslich suchen - nach "0" suchen bringt kene sinnvollen Ergebnisse.

    Einen richtigen Bit-Operator stellt MySQL anscheinend nicht zur Verfügung. Welcher der oben genannten Datentypen ist in meinem Fall vorzuziehen? Oder sollte allgemein man j/n o.ä. verwenden?

  • #2
    ich mache es i.d.r. mit ENUM('Y','N')

    aber, welche lösung die beste ich kann ich auch nicht sagen. ich lasse mich da gerne belehren.

    ich schiebe das auch mal lieber zum brainstorming

    *VERSCHIEB*
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      ENUM(true,false,NULL)

      default NULL

      so würd ich's machen (behaupte ich einfach mal )
      wenn es so geht, könntest du nach true (=1) und false (=0) suchen und bei ner falscheingabe stünde einfach NULL drin wonach du auch suchen kannst

      ich weiß nämlich nicht ob es schneller is falscheingaben so aufzuspüren:
      Code:
      SELECT id
      FROM tabelle
      WHERE binaer IS NULL
      oder so
      Code:
      SELECT id
      FROM tabelle
      WHERE binaer NOT IN ('1', '2')
      , vermute aber mal, dass ersteres evtl. schneller ist

      und falscheingaben willst du ja finden können oder soll da einfach ne 0 eingetragen werden?

      EDIT:
      alternative:
      binaer CHAR(0)

      aber frag mich nicht, ob das vorteile hinsichtlich speicherbedarf hat

      Zuletzt geändert von mrhappiness; 03.09.2003, 23:54.
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Ich persönlich würde einen ENUM() Typen bevorzugen. Die Daten werden wie beschrieben in einem Byte gespeichert ... ein "echter" Bit-Type ist wohl für spätere Versionen geplant.

        ENUM() schließt, wie auch bereits beschrieben, Fehleingaben weitestgehend aus. Ob Du jetzt '0','1'; 'Y','N'; 'Yes','No' oder 'Ja','Nein' verwendest ist wurscht, nur würde ich möglichst "sprechende" Werte verwenden, aber '0' und '1' können natürlich auch sinnvoll sein.
        carpe noctem

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

        Kommentar


        • #5
          Was hat es im Forum eigentlich mit editiertem Text auf sich??? Bin noch net der eingefleischte Foren-Besucher (auch wenn ich in letzter Zeit sehr häufig poste).

          Nach NULL zu suchen ist mir gar nicht eingefallen. Mit diesem neu errungenen Wissen halte ich

          Code:
          ENUM(true,false,NULL) default NULL
          wahrhaft für die beste Lösung.

          Code:
          binaer CHAR(0)
          Wie soll das gehn, das wären doch 0 Byte...

          Naja, ich denk ich hab die Antwort die ich wollte, danke.

          Kommentar


          • #6
            editierter text ist das was du bekommst wenn du im formular zum beitrag verfassen auf den EDIT-button klickst

            binaer CHAR(0) kann entweder ein leerer string sein (==1) oder NULL (==0) ist evtl. die speichersparendste variante, aber sicher bin ich mir nicht (und falsche einträge kannst du nicht mehr identifizieren

            SELECT * FROM tabelle WHERE binaer='' liefert alle 1er

            SELECT * FROM tabelle WHERE binaer IS NULL liefert alle 0er
            EDIT:
            da isses wieder *g*

            aber die variante mit enum ist finde ich intuitiver

            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Den Edit-Button kannte ich schon. Aber zu welchem Zweck wird editierter Text verwendet? Das wurde mir immer noch nicht klar...ist ja kein Zitat oder Quelltext.

              Code:
              SELECT * FROM tabelle WHERE binaer=''
              Hat das "binaer" ne Sonderfunktion oder ist das die Spaltenbezeichnung? Ich frag nur weil im Thread eigentölich die Spaltenbezeichnung "id" verwendet wurde.
              Zuletzt geändert von Stephan666; 04.09.2003, 09:57.

              Kommentar


              • #8
                OffTopic:
                Original geschrieben von Stephan666
                Den Edit-Button kannte ich schon. Aber zu welchem Zweck wird editierter Text verwendet?
                damit kannst du markieren, was du später geändert hast.

                das ist ganz gut, damit leser, die gerade was gepostet haben, zu zeigen, dass da was neues ist. durch das rot wird es besonders hervorgehoben.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Ah - jetzt....ja!

                  Kommentar


                  • #10
                    OffTopic:
                    Original geschrieben von Stephan666
                    Ah - jetzt....ja!
                    ..... eeeeiiine insel mit ....
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar

                    Lädt...
                    X