Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Menganggap \'string\' sebagai 0 dalam Perbandingan Berangka?

Mengapa MySQL Menganggap \'string\' sebagai 0 dalam Perbandingan Berangka?

DDD
DDDasal
2024-12-10 16:10:11253semak imbas

Why Does MySQL Treat 'string' as 0 in Numeric Comparisons?

Keanehan Perbandingan Berangka: 'rentetan' MySQL yang Mengejutkan kepada Penilaian 0

Dalam MySQL, tingkah laku yang tidak dijangka muncul apabila membandingkan 'rentetan' dengan 0. Walaupun penaakulan logik mencadangkan hasil yang salah, ia secara mengejutkan menghasilkan kebenaran. Anomali ini berpunca daripada penghantaran rentetan automatik MySQL kepada nombor semasa perbandingan.

Jika rentetan bermula dengan aksara angka, MySQL menukarnya kepada nilai angka. Walau bagaimanapun, rentetan tanpa awalan berangka dianggap sebagai 0s. Oleh itu, 'rentetan' dibuang ke 0, menghasilkan perbandingan sebenar kepada 0.

Tingkah laku ini terbukti dalam contoh di mana lajur rentetan dibandingkan dengan 0:

select 'string' = 0 as res; -- res = 1 (true)

Dalam kontras, perbandingan dengan nombor lain, kedua-dua integer dan perpuluhan, mengembalikan palsu seperti yang dijangkakan:

select 'string' = -12 as res; -- res = 0 (false)
select 'string' = 3131.7 as res; -- res = 0 (false)

Walau bagaimanapun, apabila membandingkan rentetan dengan '0' sebagai rentetan, hasilnya adalah palsu:

select 'string' = '0' as res; -- res = 0 (false)

Untuk memaksa penukaran, pengendali seperti ' ' boleh digunakan:

select '0string' + 0 = 'string' AS res; -- res = 1 (true)

Pertanyaan ini memastikan bahawa '0rentetan' ditukar kepada nombor sebelum penjumlahan. Selepas itu, 'rentetan' juga ditukar kepada nombor, menghasilkan perbandingan berangka.

Memahami gelagat penghantaran ini adalah penting untuk mengelakkan keputusan yang tidak dijangka dalam pertanyaan MySQL. Dengan memanfaatkan pengendali yang secara eksplisit menukar rentetan kepada nombor, pembangun dapat memastikan perbandingan yang tepat dan mengelakkan kemungkinan salah faham.

Atas ialah kandungan terperinci Mengapa MySQL Menganggap \'string\' sebagai 0 dalam Perbandingan Berangka?. 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