Perbandingan String-to-0 MySQL yang Membingungkan: Disahkan
Apabila melakukan pertanyaan MySQL, seseorang mungkin menemui hasil yang tidak dijangka: membandingkan lajur rentetan dengan 0 (sebagai nombor) secara tidak dijangka mengembalikan BENAR. Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, terutamanya apabila perbandingan berangka lain membuahkan hasil yang dijangkakan.
Menyelidiki mekanik asas MySQL, jawapannya terletak pada ciri penukaran automatiknya. MySQL mempunyai keupayaan untuk menghantar rentetan ke dalam nombor dengan lancar, berdasarkan syarat tertentu:
Menggunakan logik ini, kita boleh membongkar misteri 'rentetan' = 0 mengembalikan BENAR. Memandangkan 'rentetan' tidak bermula dengan nombor, MySQL mentafsirkannya sebagai 0, menghasilkan perbandingan SELECT 0 = 0, yang sudah tentu bernilai BENAR.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penukaran ini berlaku. tidak berlaku apabila membandingkan rentetan secara langsung. Sebagai contoh, '0string' = 'string' akan menghasilkan FALSE seperti yang dimaksudkan.
Sebagai alternatif, penukaran eksplisit menggunakan operator (seperti ) memaksa MySQL untuk menganggap rentetan sebagai nombor. Apabila menggunakan operator ' ', MySQL menjumlahkan '0string' dan 0, menukar kedua-dua nilai kepada nombor (0 0), menghasilkan nilai TRUE yang dijangkakan.
Selain itu, MySQL juga membenarkan penjumlahan rentetan yang merangkumi aksara angka. Sebagai contoh, '1abc' '2ef' berkesan diterjemahkan kepada 1 2, menghasilkan hasil yang dijangkakan sebanyak 3.
Memahami mekanik di sebalik tabir ini merungkai teka-teki perbandingan rentetan-ke-0 MySQL, membolehkan tafsiran data yang tepat dan pembinaan pertanyaan yang tepat.
Atas ialah kandungan terperinci Mengapa Perbandingan Rentetan MySQL dengan 0 Kadangkala Kembali BENAR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!