Ada NULLIF()
fungsi:
SELECT NULLIF(var, '');
Jika var
memegang nilai dalam $2, Anda mendapatkan NULL
sebagai gantinya.
Pada contoh saya mengganti string kosong:''
dengan NULL
.
Tidak ada tidak ada string kosong untuk tipe integer . Hanya tidak mungkin. Sejak NULLIF()
tidak dapat mengganti tipe data, Anda harus membersihkan input Anda di PHP.
Jika Anda tidak menentukan default kolom, Anda juga dapat menghilangkan saja kolom di INSERT
perintah dan itu akan diisi dengan NULL
(yang merupakan default DEFAULT
).
Periksa apakah parameter kosong di PHP dan jangan sertakan kolom di INSERT
perintah jika ya.
Atau gunakan PHP literal NULL sebagai gantinya seperti yang ditunjukkan Quassnoi di sini .
Selebihnya hanya masuk akal untuk tipe string
Untuk memastikan sepenuhnya , tidak ada yang bisa memasukkan string kosong tambahkan CHECK
kendala ke tabel:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Untuk menghindari pengecualian karena ini, Anda dapat menambahkan pemicu yang memperbaiki input secara otomatis:
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();