NULL oder ''

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

  • NULL oder ''

    was ist besser oder eleganter in der DB?

    einem feld zu erlauben, dass es NULL sein darf,
    oder es als NOT NULL default '' zu definieren.
    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 |



  • #2
    Spontan finde ich NULL schöner.

    Kommentar


    • #3
      d'accord
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Eindeutig NULL ... wenn überhaupt ... und es nicht weiter normalisiert werden kann ... da kann man so schön IFNULL() drauf anwenden ... !
        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
          ok. dann sind wir uns alle einig, dass NULL das beste ist. davon war ich auch ausgegangen...

          aber ....

          wie würdet ihr dies am saubersten handeln? variante 1 oder 2?
          im zuge der sauberen programmierung natürlich. (siehe auch: ErrorReporting: sauber oder sauberer?)



          variante 1
          PHP-Code:
          $sql "SELECT eMail FROM ....";
          .
          .
          $email = (isset($zeile["eMail"])) ? $zeile["eMail"] : ""
          variante 2
          PHP-Code:
          $sql "SELECT IF(ISNULL(eMail),'',eMail) eMail FROM ....";
          .
          .
          $email $zeile["eMail"]; 
          EDIT:
          beide varianten funktionieren korrekt.
          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


          • #6
            Wieso schlagt Ihr hier alle NULL vor?
            Im MySQL Manual steht doch ausdrücklich:
            Deklarieren Sie Spalten - falls möglich - als NOT NULL. Das macht alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn Sie wirklich NULL in Ihrer Applikation benötigen, Sie dieses natürlich benutzen sollten. Vermeiden Sie nur, einfach alle Spalten vorgabemäßig auf NULL zu haben.
            [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
              Bei Feldern die null sein können, sollte man sich die Frage stellen, ob sie nicht in eine andere Tabelle quasi "wegnormalisiert" werden können.

              @see Antwort goth

              EDIT:

              und die ifnull variante dann in den JOINS verwenden...

              Zuletzt geändert von MelloPie; 09.04.2003, 07:42.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                also bei JOINs verwende ich schon id-felder und die sind natürlich nicht NULL sondern haben in der regel, wie es auch sein sollte, einen autoincrement enthalten. eine 'wegnormalisierung' kann damit eigentlich nicht stattfinden. oder?

                was das hier betrifft ...
                Deklarieren Sie Spalten - falls möglich - als NOT NULL. Das macht alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn Sie wirklich NULL in Ihrer Applikation benötigen, Sie dieses natürlich benutzen sollten. Vermeiden Sie nur, einfach alle Spalten vorgabemäßig auf NULL zu haben.
                ... so verstehe ich spontan nicht, warum ich dadurch ein bit sparen kann. eigentlich war ich nämlich davon ausgegangen, dass das NULL die kleinste einheit ist.

                wenn ich z.b. VARCHAR(30) habe, so werden mir 30 zeichen im eintrag reserviert in der tabelle. auch wenn ich nur ein zeichen oder keines dort stehen habe. wenn ich NULL habe, so wird nichts reserviert. das war zumindest meine bisherige information.

                kann mich hier mal bitte jemand aufklären?

                wenn es aber alles darauf hindeutet, dass ich doch '' statt NULL verwenden sollte, weil es besser ist, so habe ich auch kein problem damit. es würde sogar die programmierarbeit minimieren, da ich kein ISNULL() oder IF in der DB und kein isset() in php verwenden bräuchte.
                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
                  Original geschrieben von Abraxax
                  was das hier betrifft ...... so verstehe ich spontan nicht, warum ich dadurch ein bit sparen kann. eigentlich war ich nämlich davon ausgegangen, dass das NULL die kleinste einheit ist.

                  wenn ich z.b. VARCHAR(30) habe, so werden mir 30 zeichen im eintrag reserviert in der tabelle. auch wenn ich nur ein zeichen oder keines dort stehen habe. wenn ich NULL habe, so wird nichts reserviert. das war zumindest meine bisherige information.
                  zitat mysql-manual:
                  Jede NULL-Spalte benötigt ein zusätzliches Bit, gerundet auf das nächste Byte.

                  (es wird davon ausgegangen, dass du im normalfall deine felder überwiegend mit werten füllst anstatt sie leer zu lassen.)

                  wenn du jetzt ein feld mit NULL definiert hast, muss es ja noch irgendein kennzeichen geben, ob der wert jetzt wirklich NULL ist oder einfach nur ein integer mit wert 0 oder ein string der nur eine binäre null (stringendezeichen) enthält.
                  denn ohne dieses kennzeichen kannst du nicht feststellen, ob 0 jetzt integer-0 (bzw. stringende) bedeutet, oder wirklich ein feld darstellt dem noch gar kein wert zugewiesen wurde.

                  bei einer NOT NULL spalte bedeutet 0 jetzt aber auf jeden fall eine integer-null, du brauchst hier also dieses kennzeichen nicht und hast also ein bit gespart.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    ok. klingt logisch und habe ich auch verstanden... werde wohl daher auf NOT NULL umsteigen (müssen). macht die arbeit ja auch leichter.

                    habe ich dann richtig verstanden, dass bei VARCHAR(30) nur das stingende enthalten ist, wenn kein inhalt da ist, und nicht, wie ich angenommen habe, 30 zeichen reserviert werden?
                    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


                    • #11
                      wegnormalisieren im Sinne von :

                      wenn in einer Tabelle eine Spalte oft leer oder null ist, dann nimm sie aus der Tabelle und referenziere Sie auf die Mastertabelle...
                      Da gehts nicht um auto_increment werte, die dürfen sowieso nicht null sein...
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        Original geschrieben von Abraxax
                        habe ich dann richtig verstanden, dass bei VARCHAR(30) nur das stingende enthalten ist, wenn kein inhalt da ist, und nicht, wie ich angenommen habe, 30 zeichen reserviert werden?
                        zitat manual:
                        Werte in VARCHAR-Spalten sind Zeichenketten variabler Länge. Sie können eine VARCHAR-Spalte mit jeder Länge zwischen 1 und 255 deklarieren, genau wie für CHAR-Spalten. Im Gegensatz zu CHAR werden VARCHAR-Werte jedoch nur mit so vielen Zeichen wie nötig gespeichert, plus 1 Byte, um die Länge zu speichern. Die Werte werden nicht aufgefüllt; statt dessen werden Leerzeichen am Ende beim Speichern entfernt. (Diese Entfernung von Leerzeichen weicht von der ANSI-SQL-Spezifikation ab.)

                        das mit der binären null als stringende hab ich aus C übernommen, kann nicht sicher sagen ob mysql die daten auch genau so abspeichert, aber ich denke mal schon.
                        aber wie du am zitat siehst, verbraucht ein leeres varchar-feld auch nur ein oder zwei byte (je nachdem, ob in so einem fall nur länge=0 abgespeichert wird, oder länge=1 und erstes zeichen dann binäre null. ich vermute aber ersteres).
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          hey vielen dank für die ausführliche erläuterung. jetzt habe ich es auch kapiert.

                          und aus ...
                          (Diese Entfernung von Leerzeichen weicht von der ANSI-SQL-Spezifikation ab.)
                          ... ist auch meine info gewesen. ich nahm ja an, dass aufgefüllt wird. und da es nicht gefüllt wird, werde ich jetzt '' verwenden...

                          denoch eine frage dann zu NULL : wann macht das dann überhaupt noch sinn?
                          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


                          • #14
                            Ich würde sagen, NULL brauchst du nur, wenn du zwischen einer leeren Eingabe und keiner Eingabe unterscheiden musst. Aber mir fällt da im Moment kein Beispiel ein, wo das notwendig wäre.
                            [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


                            • #15
                              Original geschrieben von Troublegum
                              Ich würde sagen, NULL brauchst du nur, wenn du zwischen einer leeren Eingabe und keiner Eingabe unterscheiden musst. Aber mir fällt da im Moment kein Beispiel ein, wo das notwendig wäre.
                              mir fällt auch kein beispiel ein....

                              denn wenn ich eine FORM hab und die poste, so habe ich auch bei den feldern wo keine eingabe ist, einen leeren string enthalten...
                              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