AhANiBoy: Unterschied zwischen NULL, sowie '', und NULL

hi

user varchar(20) NOT NULL,    sagt doch aus,
daß "user"  NICHT leer sein darf, oder?

insert into foo (id, user) values ('', '');   geht jedoch!

select * from foo;   zeigt mir,
dass das Feld "user" in der entsprechenden Zeile leer ist.
Warum ist dem so?
Ich definierte doch eindeutig dass es NOT NULL ist!

Was ist dann ein NULL Feld?
Also was ist der Unterschied zwischen NULL und NOT NULL und '' ?

Alle scheinen leere Felder zu erlauben!

Danke...
Schönen Tag noch wünscht
Euer AhANiBoy

  1. Hallo AhANiBoy

    user varchar(20) NOT NULL,    sagt doch aus,
    daß "user"  NICHT leer sein darf, oder?

    dass in der Spalte user stets etwas stehen muss.

    insert into foo (id, user) values ('', '');   geht jedoch!

    Warum auch nicht, das ist der Leerstring, das ist was ganz anderes als NULL.
    Die Ziffer 0 ist übrigens auch was anderes als NULL.

    Siehe <http://dev.mysql.com/doc/mysql/de/null-values.html@MySQL-Handbuch, NULL-Werte>.

    select * from foo;   zeigt mir,
    dass das Feld "user" in der entsprechenden Zeile leer ist.

    Es ist nicht "leer", es steht der Leerstring drin. Das ist ein subtiler Unterschied.

    Teste bitte

    SELECT * from foo WHERE user IS NULL

    Was ist dann ein NULL Feld?

    s.o.

    Also was ist der Unterschied zwischen NULL und NOT NULL und '' ?

    NULL:     keine Daten vorhanden
    NOT NULL: Daten vorhanden
    '':       Leerstring vorhanden, somit Daten vorhanden :-)

    Alle scheinen leere Felder zu erlauben!

    Nö.

    Freundliche Grüße

    Vinzenz

    1. hi Vinzenz!

      Lieben Dank für die rasche Hilfe um die Uhrzeit!
      Jetzt ist bald alles fertig für die Schule :-)

      Dankende Grüße
      AhANiBoy

    2. Tag zusammen,

      NULL:     keine Daten vorhanden
      NOT NULL: Daten vorhanden
      '':       Leerstring vorhanden, somit Daten vorhanden :-)

      Und weil das alles so ist, man aber gelegentlich auch '' unterbinden möchte ohne den Inhalt auf NULL zu setzen gibt es z.B. in MS-Access (ok, nicht wirklich ein gutes DBMS, aber immerhin) noch die zusätzliche Angabe, ob leere Zeichenfolgen erlaubt sind. Nach solchen Fehlern sucht man ne Weil wenn man nicht damit rechnet... Ist aber glaub ich eher nicht Standard-SQL, kann aber über CONSTRAINTS auch anderweitig realisiert werden.

      MfG
      Rouven

      --
      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(