C'è il NULLIF()
funzione:
SELECT NULLIF(var, '');
Se var
contiene il valore in $2, ottieni NULL
invece.
Nell'esempio sostituisco la stringa vuota:''
con NULL
.
Non c'è nessuna stringa vuota per il tipo intero . Semplicemente non possibile. Dal momento che NULLIF()
non è possibile cambiare il tipo di dati, devi disinfettare il tuo input in PHP.
Se non hai definito una colonna predefinita, puoi anche omettere semplicemente la colonna nel INSERT
comando e verrà riempito con NULL
(che è il DEFAULT
predefinito ).
Controlla se il parametro è vuoto in PHP e non includere la colonna in INSERT
comando se lo è.
Oppure usa il valore letterale PHP NULL invece, come dimostra Quassnoi qui .
Il resto ha senso solo per i tipi di stringa
Per assicurarsi assolutamente , nessuno può inserire una stringa vuota aggiungere un CHECK
vincolo alla tabella:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Per evitare eccezioni a causa di ciò, potresti aggiungere un trigger che corregge automaticamente l'input:
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();