sql >> Databasteknik >  >> RDS >> Mysql

Jag ställer in en MySQL-kolumn till NOT NULL men ändå kan jag infoga ett tomt värde

TOMMA STRÄNGAR

I ORACLE används en tom sträng för att representera NULL. I praktiskt taget allt annat är dock en tom sträng fortfarande en sträng, och alltså inte NULL.


INTS

I ditt fall infogar du faktiskt STRINGS i en INT-kolumn. Detta tvingar fram en implicit CAST-operation.

När din RDBMS konverterar strängen '' till en INT måste den få värdet 0. Eftersom 0 inte är NULL, infogas detta.

Ett mer giltigt test skulle vara:

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


REDIGERA

Förlåt, jag läste bara till hälften av din fråga. Du frågar också hur man stoppar '' sätts in.

Ditt första problem är att du infogar STRINGS och tabellen är definierad som att ha INT-fält. Du kan sätta begränsningar på data som infogas, men dessa begränsningar kommer att tillämpa värdet after en konvertering till en INT. Såvida du inte vill förhindra värdet 0 från att också infogas finns det inget du kan göra med tabellen för att förhindra detta scenario.

Din bättre insats är att ta itu med varför du sätter in strängar i första hand. Du kan använda en lagrad procedur som tar och kontrollerar strängarna innan du konverterar dem till INT och sedan infogar dem. Eller ännu bättre, du kan göra kontrollerna i din klientapplikation.

Ett tekniskt tillgängligt alternativ är att göra fälten till CHAR-fält och sedan sätta en begränsning på fälten, vilket förhindrar '' från att sättas in. Jag skulle starkt avråder från detta.



  1. MySQL kombinera två kolumner och lägg till en ny kolumn

  2. Hur ställer jag in en standard standardbild (no_pic.gif) php?

  3. Hur exporterar man bildfält till fil?

  4. Hur man filtrerar poster med aggregatfunktion AVG