sql >> Databáze >  >> RDS >> Mysql

Nastavil jsem sloupec MySQL na NOT NULL, ale stále mohu vložit prázdnou hodnotu

PRÁZDNÉ ŘETĚZCE

V ORACLE se k reprezentaci používá prázdný řetězec NULA. Prakticky ve všem ostatním je však prázdný řetězec stále řetězcem, a tedy ne NULL.


INTS

Ve vašem případě ve skutečnosti vkládáte STRINGS do sloupce INT. To vynutí implicitní Operace CAST.

Když vaše RDBMS převádí řetězec '' do INT musí získat hodnotu 0. Protože 0 není NULL, vloží se toto.

Platnější test by byl:

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


UPRAVIT

Promiň, tvůj dotaz jsem přečetl jen napůl. Také se ptáte, jak zastavit '' vkládá se.

Váš první problém je, že vkládáte STRINGS a tabulka je definována tak, že má pole INT. Data, která se vkládají, můžete omezit, ale tato omezení budou aplikovat hodnotu po převod na INT. Pokud nechcete zabránit hodnotě 0 z také vložení, nemůžete s tabulkou nic udělat, abyste tomuto scénáři zabránili.

Nejlepší je vyřešit, proč vkládáte řetězce. Můžete použít uloženou proceduru, která vezme a zkontroluje řetězce, než je převede na INT a poté je vloží. Nebo, ještě lépe, můžete provést kontroly ve své klientské aplikaci.

Technicky dostupnou možností je vytvořit z polí CHAR pole a poté pole omezit, aby se zabránilo '' od vložení. Já bych silně doporučit proti.



  1. Snímky databáze SQL Server -1

  2. Chyba připojení Java Oracle localhost (ORA-12505)

  3. jak 'načíst data infile' na amazon RDS?

  4. Nové funkce v SQL Server 2017 (databázový stroj)