MySQL convierte automáticamente una cadena a un número:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
y una cadena que no comienza con un número se evalúa como 0:
SELECT 'string' = 0 AS res; -- res = 1 (true)
Por supuesto, cuando tratamos de comparar una cadena con otra cadena, no hay conversión:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
pero podemos forzar una conversión usando, por ejemplo, un operador +:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
la última consulta devuelve VERDADERO porque estamos sumando una cadena '0cadena' con un número 0, por lo que la cadena debe convertirse en un número, se convierte en SELECT 0 + 0 = 'string'
y luego nuevamente la cadena 'cadena' se convierte en un número antes de compararse con 0, y luego se convierte en SELECT 0 = 0
lo cual es VERDADERO.
Esto también funcionará:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
y devolverá la suma de las cadenas convertidas a números (1 + 2 en este caso).