Baru-baru ini menghadapi masalah Mysql mengembalikan berbilang nilai, dan akhirnya mendapati ia dinilai dengan 0 nilai dalam mysql soalan syarat penapis.
Terdapat medan INT a, nilai lalai ialah 0, dan syarat penghakiman yang diluluskan oleh atur cara ialah a = 'abacd'.
Input ialah rentetan dan semua data dengan a=0 dikembalikan.
MySQL akan membuat pertimbangan logik Jika ia adalah penghakiman integer, tetapi input adalah rentetan, jika rentetan itu bukan nombor, rentetan itu akan ditukar kepada 0. Oleh itu, keadaan sebenar yang dinilai oleh kod ini
ialah a = 0.
Apabila membuat pertimbangan logik dalam MySQL, anda harus memastikan bahawa nilai masuk adalah konsisten dengan jenis medan, iaitu medan integer harus menilai integer dan medan rentetan harus menilai rentetan. Apabila pertimbangan jenis silang mesti dibuat, pelarasan yang sesuai perlu dibuat berdasarkan logik perniagaan untuk mengelakkan masalah.
Jika medan a adalah daripada jenis varchar dan nilainya ialah 0, maka a='0' hendaklah digunakan untuk penghakiman dan bukannya a = 0 untuk alasan yang sama seperti di atas, rentetan akan ditukar kepada 0, dan hasil akhir ialah 0 = 0.
Dalam MySQL, apabila medan jadual data adalah jenis int, anda boleh menilai sama ada medan itu 0, dan tidak akan ada masalah. Jika ia adalah jenis char atau varchar, anda perlu menggunakan '0' Jelas sekali, rentetan dan integer adalah tidak bersamaan. Jadi jangan buat kesilapan bodoh itu.
Berikut ialah prinsip carian mysql yang terdapat di Internet:
mysql akan terlebih dahulu menukar nilai medan kepada integer dan kemudian membandingkannya.
Jika digit pertama medan ialah rentetan, maka ia akan ditukar kepada integer dan ia akan menjadi 0.
Secara amnya, petikan diperlukan semasa mencari rentetan.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan perangkap 0 penghakiman nilai dalam Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!