Existuje NULLIF()
funkce:
SELECT NULLIF(var, '');
Pokud var má hodnotu v $ 2, dostanete NULL místo toho.
V příkladu nahrazuji prázdný řetězec:'' s NULL .
Pro typ integer není žádný prázdný řetězec . Prostě to není možné. Od NULLIF() nelze přepnout datový typ, musíte svůj vstup dezinfikovat v PHP.
Pokud jste nedefinovali výchozí sloupec, můžete také sloupec jednoduše vynechat v INSERT a bude vyplněn NULL (což je výchozí DEFAULT ).
Zkontrolujte, zda je parametr v PHP prázdný a nezahrnujte sloupec do INSERT příkaz, pokud je.
Nebo použijte PHP doslovný NULL místo toho jako Quassnoi předvádí zde .
Zbytek má smysl pouze pro typy řetězců
Chcete-li úplnou jistotu , nikdo nemůže zadat prázdný řetězec přidat CHECK omezení na tabulku:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Aby se vyhnuly výjimkám v důsledku toho můžete přidat spouštěč, který automaticky opraví vstup:
CREATE OR REPLACE FUNCTION trg_tr_view_avoid_empty()
RETURNS trigger AS
$func$
BEGIN
IF NEW.age = '' THEN
NEW.age := NULL;
END IF;
IF NEW.month = '' THEN
NEW.month := NULL;
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER tr_view_avoid_empty
BEFORE INSERT OR UPDATE ON tr_view
FOR EACH ROW
WHEN (NEW.age = '' OR NEW.month = '')
EXECUTE PROCEDURE trg_tr_view_avoid_empty();