Der er NULLIF()
funktion:
SELECT NULLIF(var, '');
Hvis var
holder værdien i $2, får du NULL
i stedet for.
I eksemplet erstatter jeg den tomme streng:''
med NULL
.
Der er ingen tom streng for typen heltal . Bare ikke muligt. Siden NULLIF()
ikke kan skifte datatype, skal du rense dit input i PHP.
Hvis du ikke har defineret en kolonnestandard, kan du også bare udelade kolonnen i INSERT
kommando, og den vil blive udfyldt med NULL
(som er standard DEFAULT
).
Tjek om parameteren er tom i PHP, og medtag ikke kolonnen i INSERT
kommando, hvis det er.
Eller brug PHP literal NULL i stedet demonstrerer Quassnoi her .
Resten giver kun mening for strengtyper
For at være helt sikker , ingen kan indtaste en tom streng tilføje en CHECK
begrænsning til tabellen:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
For at undgå undtagelser forårsaget af dette, kan du tilføje en trigger, der retter input automatisk:
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();