Leere Zeichenfolge, die eine Null einfügt, keine Null

8

Meine Einfügeanweisung sieht so aus:

%Vor%

Das Feld bar wurde wie folgt erstellt:

%Vor%

MySQL-Version: 5.1.

Sollte eine leere Zeichenkette keinen NULL einfügen? Ich bin mir nicht sicher, warum ich eine Null (0) in der Tabelle gespeichert sehe.

    
gravyface 02.08.2011, 20:28
quelle

4 Antworten

11

MySQL versucht standardmäßig, ungültige Werte für eine Spalte auf den korrekten Typ zu zwingen. Hier ist die leere Zeichenfolge '' vom Typ string, der weder eine ganze Zahl noch NULL ist. Ich empfehle folgende Schritte:

  1. Ändern Sie die Abfrage wie folgt: INSERT INTO foo (bar) VALUES (NULL);
  2. Aktivieren Sie den strikten Modus in MySQL. Dies verhindert, dass so viele unerwartete Typ- und Wertkonvertierungen auftreten. Sie werden mehr Fehlermeldungen sehen, wenn Sie versuchen, etwas zu tun, was MySQL nicht erwartet, was Ihnen hilft, Probleme schneller zu erkennen.
Hammerite 02.08.2011, 20:38
quelle
5

Sie fügen NULL nicht in die Tabelle ein; Sie fügen eine leere Zeichenfolge ein (die scheinbar als int auf Null abgebildet wird). Denken Sie daran, dass NULL ein eindeutiger Wert in SQL ist. %Code%. Durch Angabe eines Wertes (außer NULL != '' ) fügen Sie nicht NULL ein. Der Standardwert wird nur verwendet, wenn Sie keinen Wert angeben. In Ihrem Beispiel haben Sie einen String-Wert für eine Integer-Spalte angegeben.

    
Paul Sonier 02.08.2011 20:30
quelle
2

Der Weg dahin ist, das Feld überhaupt nicht zu füllen. fülle nur die aus, die tatsächlich einen Wert haben müssen.

    
Manuel 02.08.2011 20:31
quelle
2

Warum sollte es ein NULL sein? Sie stellen einen Wert bereit, der eine ganzzahlige Darstellung aufweist: Leere Zeichenfolgen werden in INT 0 konvertiert.

Nur wenn Sie keinen Wert angegeben haben, würde der Standardwert übernehmen.

    
quelle

Tags und Links