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