Rumah  >  Artikel  >  pangkalan data  >  Mengapa \'String\' = 0 Kembali Benar dalam MySQL?

Mengapa \'String\' = 0 Kembali Benar dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-11-24 05:58:18265semak imbas

Why Does 'String' = 0 Return True in MySQL?

Misteri Penukaran Rentetan-ke-Nombor MySQL: Mengapa 'String' = 0 Kembali Benar

Apabila membandingkan lajur rentetan kepada 0, a keputusan yang mengejutkan berlaku: ia menilai kepada benar. Tingkah laku yang tidak dijangka ini berpunca daripada mekanisme penukaran jenis tersirat MySQL.

MySQL secara automatik menukar rentetan kepada nombor berdasarkan peraturan berikut:

  • Jika rentetan bermula dengan nombor, ia ditukar kepada nombor.
  • Jika rentetan tidak bermula dengan nombor, ia dianggap sebagai 0.

Dalam kes 'rentetan' = 0, kerana rentetan tidak bermula dengan nombor, ia dinilai sebagai 0. Penukaran ini menyebabkan perbandingan menjadi '0' = 0, yang benar.

Walau bagaimanapun, apabila membandingkan rentetan dengan nombor bukan sifar atau rentetan, tiada penukaran berlaku. Akibatnya, 'string' = -12 atau 'string' = '0' dinilai kepada palsu seperti yang dijangkakan.

Untuk mengatasi kelakuan lalai ini, anda boleh memaksa penukaran kepada jenis data tertentu menggunakan operator. Sebagai contoh, '0string' 0 menukar rentetan '0string' kepada nombor, menjadikan perbandingan '0' = '0' sah.

Mekanisme penukaran ini juga boleh digunakan untuk melakukan operasi aritmetik pada rentetan yang mengandungi nombor . Contohnya, '1abc' '2ef' akan menukar rentetan kepada nombor dan menjumlahkannya, menghasilkan 3.

Memahami gelagat penukaran jenis ini adalah penting untuk mengelakkan keputusan yang tidak dijangka dalam pertanyaan MySQL. Dengan memanfaatkan pengendali untuk mengawal penukaran secara eksplisit, anda boleh memastikan perbandingan dan pengiraan anda adalah tepat.

Atas ialah kandungan terperinci Mengapa \'String\' = 0 Kembali Benar dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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