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

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

DDD
Lepaskan: 2024-12-10 16:10:11
asal
258 orang telah melayarinya

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

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

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

select 'string' = '0' as res; -- res = 0 (false)
Salin selepas log masuk

Untuk memaksa penukaran, pengendali seperti ' ' boleh digunakan:

select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan