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();