Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Saya mengatur kolom MySQL ke NOT NULL tapi saya masih bisa memasukkan nilai kosong

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghubungkan ke MySQL di Amazon EC2 dari Linux / Mac?

  2. html <select multiple=multiple> + Pencarian Kueri SQL

  3. Masalah dengan MySql INSERT MAX()+1

  4. Pohon silsilah mysql

  5. PHP tidak berfungsi di server