STRING KOSONG
Di ORACLE, string kosong digunakan untuk mewakili BATAL. Namun, di hampir semua hal lainnya, string kosong masih berupa string, jadi bukan NULL.
INTS
Dalam kasus Anda, Anda sebenarnya memasukkan STRINGS ke dalam kolom INT. Ini memaksa implisit Operasi CAST.
Saat RDBMS Anda mengonversi string ''
ke INT ia harus mendapatkan nilai 0. Karena 0 bukan NULL, ini akan dimasukkan.
Tes yang lebih valid adalah:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);
EDIT
Maaf, saya hanya setengah membaca pertanyaan Anda. Anda juga bertanya bagaimana cara menghentikan ''
sedang dimasukkan.
Masalah pertama Anda adalah Anda memasukkan STRINGS dan tabel didefinisikan memiliki bidang INT. Anda dapat memberikan batasan pada data yang dimasukkan, tetapi batasan ini akan menerapkan nilai setelah konversi ke INT. Kecuali jika Anda ingin mencegah nilai 0
dari juga dimasukkan, tidak ada yang dapat Anda lakukan pada tabel untuk mencegah skenario ini.
Taruhan Anda yang lebih baik adalah untuk mengatasi mengapa Anda memasukkan string di tempat pertama. Anda bisa menggunakan prosedur tersimpan yang mengambil, dan memeriksa, string sebelum mengubahnya menjadi INT dan kemudian memasukkannya. Atau, lebih baik lagi, Anda dapat melakukan pemeriksaan di aplikasi klien Anda.
Opsi yang tersedia secara teknis adalah membuat bidang CHAR bidang, lalu memberi batasan pada bidang, mencegah ''
dari dimasukkan. Saya akan sangat merekomendasikan hal ini.