Kris: Mysql - INSERT Befehle setzt nicht NULL sondern 0

Guten Abend allerseits :)

ich habe ein sehr komisches Problem ... ich weiß nicht wieso aber wenn ich ein INSERT INTO ausführe erhalte ich ständig bei drei Werten eine "0" statt einen NULL Wert.

Ich hab keinen blassen Schimmer woran das liegen mag. Hab im phpMyAdmin nacht geschaut, jedoch sind alle Standartwerte auf NULL gesetzt ... ich hab mir nun vom PHP folgenden generierten CODE ausspucken lassen :

INSERT INTO user ( id , uid , passwort , level , email , icq , ircauth , name , wohnort , avatar , accname , seit )
VALUES ('', 'mhm', MD5('123456' ) , '1', '', '', '', '', '', '', '', '2005-11-27' )

komischweise setzt er nur "email" - "icq" & "alter" auf 0 statt NULL! Die restlichen leeren Felder setzt er wie gewollt auf NULL. Kann mir jemand sagen wo mein Denkfehler sitzt ?

mfg

KRIS

  1. Hi,

    das Phänomen hab ich letztens in PHPMyAdmin gehabt. Zwei Möglichkeiten: Entweder sind NULL-Werte verboten und stattdessen ein Default-Wert gesetzt, oder die Datenbank ersetzt '' automatisch durch einen dem Datentyp (hier: Zahl) angemessenen leeren Wert. Versuch mal, die NULL-Spalte gar nicht beim Insert zu berücksichtigen.

    MfG
    Rouven

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

    ich habe ein sehr komisches Problem ... ich weiß nicht wieso aber wenn ich ein INSERT INTO ausführe erhalte ich ständig bei drei Werten eine "0" statt einen NULL Wert.

    poste doch bitte das Erstellungsskript für Deine Tabelle.

    Ich hab keinen blassen Schimmer woran das liegen mag. Hab im phpMyAdmin nacht geschaut, jedoch sind alle Standartwerte auf NULL gesetzt ... ich hab mir nun vom PHP folgenden generierten CODE ausspucken lassen :

    INSERT INTO user ( id , uid , passwort , level , email , icq , ircauth , name , wohnort , avatar , accname , seit )
    VALUES ('', 'mhm', MD5('123456' ) , '1', '', '', '', '', '', '', '', '2005-11-27' )

    Wenn Du keine Werte eingeben willst, dann schreibe auch NULL:

    INSERT INTO user (  
      id, uid, passwort, level,  
      email, icq, ircauth, name,  
      wohnort, avatar, accname, seit)  
    VALUES (  
      NULL, 'mhm', MD5('123456'), '1',  
      NULL, NULL, NULL, NULL,  
      NULL, NULL, NULL, '2005-11-27'  
    )
    

    komischweise setzt er nur "email" - "icq" & "alter" auf 0 statt NULL! Die restlichen leeren Felder setzt er wie gewollt auf NULL. Kann mir jemand sagen wo mein Denkfehler sitzt ?

    Ein leerer String ist etwas anderes als "nicht vorhanden". NULL-Werte stehen für "nicht vorhanden", nicht für eine leere Zeichenkette. Daher verwende dort NULL-Werte in Deiner Anweisung, wo Du solche benötigst.

    Eine Spalte 'alter' habe ich übrigens nicht gefunden.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      Eine Spalte 'alter' habe ich übrigens nicht gefunden.

      jetzt wo du's ansprichst: SEHR gewagter Spaltenname, funktioniert in MySQL mit `, ist aber eigentlich reserviert. Ich würde mich davon fernhalten. Kris, falls du nicht weiß was das soll: ALTER ist ein Schlüsselwort, mit dem man Tabellen, Spalten etc. verändert. Ebenso solltest du eine Spalte z.B. nicht SELECT nennen. Siehe MySQL: Reserved Words.

      MfG
      Rouven

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

        Eine Spalte 'alter' habe ich übrigens nicht gefunden.
        jetzt wo du's ansprichst: SEHR gewagter Spaltenname, funktioniert in MySQL mit `, ist aber eigentlich reserviert. Ich würde mich davon fernhalten.

        Ich auch - aber auch weil sich das Alter einer Person jedes Jahr ändert - das Geburtsdatum (aus dem sich ja das Alter berechnen lässt) dagegen nicht.

        Grüße aus Nürnberg
        Tobias