Perbandingan Rentetan ke Sifar dalam MySQL: Menyingkap Kebenaran
Apabila membandingkan lajur rentetan dengan sifar dalam MySQL, tingkah laku yang mengejutkan didedahkan: keputusan dinilai benar. Ini berlaku dalam senario seperti:
select 'string' = 0 as res; -- res = 1 (true)
Walau bagaimanapun, membandingkan rentetan yang sama dengan nombor lain, positif dan negatif, menghasilkan keputusan palsu yang dijangkakan. Ketidakkonsistenan ini menimbulkan persoalan: mengapa anomali ini berlaku?
Di Sebalik Sihir Rentetan
MySQL secara senyap-senyap menukar rentetan kepada nombor semasa perbandingan. Untuk rentetan yang tidak bermula dengan nombor, penukaran menghasilkan sifar. Ini menerangkan sebabnya:
select 'string' = 0 as res; -- res = 1 (true)
Mengawal Penukaran
Walaupun MySQL sering mengendalikan penukaran secara automatik, memaksa mereka menggunakan operator seperti ' ' boleh berguna. Pertimbangkan ini:
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Dalam pertanyaan ini, rentetan '0rentetan' ditambah kepada sifar, mendorong penukarannya kepada nombor. Selepas itu, 'rentetan' rentetan yang ditukar dibandingkan dengan sifar, sekali lagi mencetuskan penukaran. Perbandingan yang terhasil adalah antara nilai angka, menghasilkan benar.
Penukaran rentetan automatik MySQL melangkaui perbandingan. Contohnya:
select '1abc' + '2ef' AS total; -- total = 1+2 = 3
Rentetan ditukar kepada nombor sebelum penambahan, menghasilkan operasi berangka yang betul.
Memahami mekanisme penukaran rentetan ini membantu menafikan gelagat yang kelihatan paradoks dalam perbandingan rentetan MySQL. Ia membolehkan pembangun memanfaatkan ciri ini dengan berkesan dalam penulisan pertanyaan dan manipulasi data.
Atas ialah kandungan terperinci Mengapa MySQL Menganggap Perbandingan Rentetan kepada Sifar sebagai Benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!