Mengapa MySQL Menganggap Perbandingan Rentetan kepada Sifar sebagai Benar?

Linda Hamilton
Lepaskan: 2024-11-26 07:57:09
asal
676 orang telah melayarinya

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

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

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

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

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!

sumber:php.cn
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