Il y a le NULLIF()
fonction :
SELECT NULLIF(var, '');
Si var
contient la valeur dans $2, vous obtenez NULL
à la place.
Dans l'exemple, je remplace la chaîne vide :''
avec NULL
.
Il n'y a pas de chaîne vide pour le type entier . Tout simplement pas possible. Depuis NULLIF()
ne peut pas changer le type de données, vous devez nettoyer votre entrée en PHP.
Si vous n'avez pas défini de colonne par défaut, vous pouvez également simplement omettre la colonne dans le INSERT
commande et il sera rempli avec NULL
(qui est la valeur par défaut DEFAULT
).
Vérifiez si le paramètre est vide en PHP et n'incluez pas la colonne dans le INSERT
commande si c'est le cas.
Ou utilisez le littéral PHP NULL à la place, comme le montre Quassnoi ici .
Le reste n'a de sens que pour les types de chaînes
Pour être absolument sûr , personne ne peut entrer une chaîne vide ajouter un CHECK
contrainte à la table :
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Pour éviter les exceptions causé par cela, vous pouvez ajouter un déclencheur qui corrige automatiquement l'entrée :
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();