mySQL Tanpa Jangka Mendapatkan Kembali Semua Baris Apabila Nilai Medan 0
Seorang pengguna menghadapi masalah semasa menanyakan jadual MySQL. Apabila melaksanakan pertanyaan untuk mengambil baris dengan alamat e-mel tertentu '0,' pertanyaan itu secara tidak dijangka mengembalikan semua baris. Tingkah laku ini membingungkan, kerana jadual tidak mengandungi sebarang baris dengan '0' sebagai nilai e-mel.
Setelah disiasat, didapati bahawa isu itu berpunca daripada perbandingan medan e-mel (diandaikan sebagai jenis VARCHAR) dengan nilai integer. Dalam MySQL, apabila membandingkan nilai bukan angka dengan integer, nilai bukan angka secara tersirat ditukar kepada integer. Sebarang nilai integer yang tidak sah, seperti alamat e-mel, ditukar kepada 0.
Memahami Isu Penukaran Tersirat
Secara lalai, MySQL secara automatik menukar jenis data apabila melakukan perbandingan untuk memudahkan operasi. Walau bagaimanapun, ini boleh membawa kepada hasil yang tidak dijangka apabila membandingkan nilai bukan angka dengan integer. Dalam kes ini, semua alamat e-mel, tanpa mengira nilai sebenar mereka, sedang ditukar kepada 0 dan dibandingkan dengan nilai integer yang ditentukan bagi '0.' Memandangkan tiada baris dengan nilai e-mel sebenar '0,' pertanyaan mengembalikan semua baris yang mempunyai alamat e-mel.
Mencegah Isu
Untuk menyelesaikan isu ini, adalah penting untuk memastikan bahawa perbandingan antara medan data dilakukan dengan jenis data yang sesuai. Dalam kes ini, medan e-mel harus dibandingkan dengan nilai rentetan, bukan nilai integer. Untuk melakukan ini, ubah suai pertanyaan seperti berikut:
<code class="SQL">SELECT * FROM table WHERE email='0';</code>
Dengan melampirkan nilai dalam petikan tunggal ('), medan e-mel ditukar kepada jenis rentetan, memastikan perbandingan rentetan ke rentetan yang betul dan menghalang penukaran tersirat kepada integer.
Kesimpulan
Penukaran jenis data tersirat boleh membawa kepada gelagat yang tidak dijangka, terutamanya apabila membandingkan medan bukan angka dengan integer. Untuk mengelakkan isu sedemikian, adalah penting untuk mempertimbangkan dengan teliti jenis data yang terlibat dalam perbandingan dan memastikan bahawa medan data ditukar dengan sewajarnya agar sepadan dengan operasi perbandingan yang diingini. Dengan mengikuti garis panduan ini, pembangun boleh menghalang keputusan yang mengelirukan dan mengekalkan integriti pertanyaan pangkalan data mereka.
Atas ialah kandungan terperinci Mengapa MySQL Mengembalikan Semua Baris Apabila Nilai Medan Adalah 0 Daripada Tiada?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!