Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ich setze eine MySQL-Spalte auf NOT NULL, kann aber trotzdem einen leeren Wert einfügen

LEERE STREIFEN

In ORACLE wird ein leerer String zur Darstellung verwendet NULL. In praktisch allem anderen ist jedoch ein leerer String immer noch ein String und somit nicht NULL.


INTS

In Ihrem Fall fügen Sie tatsächlich STRINGS in eine INT-Spalte ein. Dies erzwingt ein implizites CAST-Vorgang.

Wenn Ihr RDBMS die Zeichenfolge '' konvertiert zu einem INT muss es den Wert 0 erhalten. Da 0 nicht NULL ist, wird dies eingefügt.

Ein validerer Test wäre:

INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);


BEARBEITEN

Entschuldigung, ich habe Ihre Frage nur halb gelesen. Sie fragen auch, wie man '' stoppt wird eingefügt.

Ihr erstes Problem besteht darin, dass Sie STRINGS einfügen und die Tabelle so definiert ist, dass sie INT-Felder enthält. Sie können den Daten, die eingefügt werden, Einschränkungen auferlegen, aber diese Einschränkungen gelten für den Wert after eine Umwandlung in ein INT. Es sei denn, Sie möchten den Wert 0 verhindern auch eingefügt wird, können Sie nichts an der Tabelle tun, um dieses Szenario zu verhindern.

Ihre bessere Wette ist es, zu klären, warum Sie überhaupt Strings einfügen. Sie könnten eine gespeicherte Prozedur verwenden, die die Zeichenfolgen übernimmt und überprüft, bevor Sie sie in INTs konvertieren und dann einfügen. Oder, noch besser, Sie könnten die Überprüfungen in Ihrer Client-Anwendung vornehmen.

Eine technisch verfügbare Option besteht darin, die Felder zu CHAR-Feldern zu machen und dann eine Einschränkung auf die Felder zu setzen, wodurch '' verhindert wird vom Einfügen. Ich würde stark davon abraten.