MySQL kastar automatiskt en sträng till ett nummer:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
och en sträng som inte börjar med ett nummer utvärderas som 0:
SELECT 'string' = 0 AS res; -- res = 1 (true)
Naturligtvis, när vi försöker jämföra en sträng med en annan sträng finns det ingen konvertering:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
men vi kan tvinga fram en omvandling med till exempel en + operator:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
sista frågan returnerar TRUE eftersom vi summerar en sträng '0string' med ett nummer 0, så strängen måste konverteras till ett tal, den blir SELECT 0 + 0 = 'string'
och sedan omvandlas strängen 'sträng' till ett tal innan den jämförs med 0, och den blir sedan SELECT 0 = 0
vilket är SANT.
Detta kommer också att fungera:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
och kommer att returnera summan av strängarna omvandlade till tal (1 + 2 i detta fall).