Det finns NULLIF()
funktion:
SELECT NULLIF(var, '');
Om var
har värdet i $2 får du NULL
istället.
I exemplet ersätter jag den tomma strängen:''
med NULL
.
Det finns ingen tom sträng för typen heltal . Bara inte möjligt. Sedan NULLIF()
inte kan byta datatyp, du måste rensa din input i PHP.
Om du inte har definierat en kolumnstandard kan du också bara utelämna kolumnen i INSERT
kommandot och det kommer att fyllas med NULL
(vilket är standard DEFAULT
).
Kontrollera om parametern är tom i PHP och inkludera inte kolumnen i INSERT
kommandot om det är det.
Eller använd PHP literal NULL istället som Quassnoi demonstrerar här .
Resten är bara vettigt för strängtyper
För att försäkra dig helt , ingen kan ange en tom sträng lägg till en CHECK
begränsning till tabellen:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
För att undvika undantag orsakat av detta kan du lägga till en trigger som fixar inmatning automatiskt:
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();