Има NULLIF()код>
функция:
SELECT NULLIF(var, '');
Ако var
държи стойността в $2, получавате NULL
вместо това.
В примера замествам празния низ:''
с NULL
.
Няма няма празен низ за типа integer . Просто не е възможно. Тъй като NULLIF()
не можете да превключите типа данни, трябва да дезинфекцирате въвеждането си в PHP.
Ако не сте дефинирали колона по подразбиране, можете също просто да пропуснете колоната в INSERT
и ще бъде попълнено с NULL
(което е DEFAULT
по подразбиране ).
Проверете дали параметърът е празен в PHP и не включвайте колоната в INSERT
команда, ако е.
Или използвайте PHP литерала NULL вместо това, както Quassnoi демонстрира тук .
Останалото има смисъл само за типове низове
За да бъдете абсолютно сигурни , никой не може да въведе празен низ, добавете CHECK
ограничение към таблицата:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
За избягване на изключения причинено от това, можете да добавите тригер, който автоматично коригира въвеждането:
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();