Rumah  >  Artikel  >  pangkalan data  >  Mengapa MySQL Menganggap Perbandingan Rentetan kepada Sifar sebagai Benar?

Mengapa MySQL Menganggap Perbandingan Rentetan kepada Sifar sebagai Benar?

Linda Hamilton
Linda Hamiltonasal
2024-11-26 07:57:09682semak imbas

Why Does MySQL Treat String Comparisons to Zero as True?

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!

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