Mengapa MySQL Mengembalikan Semua Baris Apabila Nilai Medan Adalah 0 Daripada Tiada?

Barbara Streisand
Lepaskan: 2024-10-24 08:58:02
asal
643 orang telah melayarinya

Why Does MySQL Return All Rows When Field Value Is 0 Instead of None?

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!