sql >> Database >  >> RDS >> Mysql

Ik heb een MySQL-kolom ingesteld op NIET NULL, maar ik kan toch een lege waarde invoegen

LEGE STRINGS

In ORACLE wordt een lege string gebruikt om weer te geven NUL. In vrijwel al het andere is een lege string echter nog steeds een string, en dus niet NULL.


INTS

In jouw geval voeg je STRINGS in een INT-kolom in. Dit dwingt een impliciete CAST-bewerking.

Wanneer uw RDBMS de tekenreeks '' . converteert naar een INT moet het de waarde 0 krijgen. Omdat 0 niet NULL is, wordt dit ingevoegd.

Een meer geldige test zou zijn:

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


BEWERKEN

Sorry, ik heb je vraag maar half gelezen. U vraagt ​​ook hoe u '' kunt stoppen wordt ingevoegd.

Uw eerste probleem is dat u STRINGS invoegt en dat de tabel is gedefinieerd met INT-velden. U kunt beperkingen stellen aan de gegevens die worden ingevoegd, maar deze beperkingen zullen de waarde na toepassen een ombouw naar een INT. Tenzij u de waarde 0 . wilt voorkomen niet ook wordt ingevoegd, kunt u niets aan de tabel doen om dit scenario te voorkomen.

Het is beter om aan te geven waarom u in de eerste plaats strings invoegt. U kunt een opgeslagen procedure gebruiken die de tekenreeksen neemt en controleert voordat u ze naar INT's converteert en ze vervolgens invoegt. Of, nog beter, u kunt de controles uitvoeren in uw klantentoepassing.

Een technisch beschikbare optie is om de velden CHAR-velden te maken en vervolgens een beperking op de velden te plaatsen, waardoor '' wordt voorkomen van worden ingebracht. Ik zou sterk raden dit af.



  1. waarom krijg ik een syntaxisfout voor een voorbereide verklaring?

  2. De IN-clausule gebruiken met een door komma's gescheiden tekenreeks uit de uitvoer van een functie Replace() in Oracle SQL

  3. actieve recordsom in codeigniter

  4. Hoe native SQL-query's in dezelfde Hibernate-transactie uit te voeren?