sql >> Base de Datos >  >> RDS >> Mysql

mysql:¿por qué comparar una 'cadena' con 0 da como resultado verdadero?

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).