Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql:por que comparar uma 'string' com 0 dá verdadeiro?


O MySQL converte automaticamente uma string para um 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)

e uma string que não começa com um número é avaliada como 0:
SELECT 'string' = 0 AS res;  -- res = 1 (true)

Claro, quando tentamos comparar uma string com outra string não há conversão:
SELECT '0string' = 'string' AS res; -- res = 0 (false)

mas podemos forçar uma conversão usando, por exemplo, um operador +:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

última consulta retorna TRUE porque estamos somando uma string '0string' com um número 0, então a string deve ser convertida em um número, torna-se SELECT 0 + 0 = 'string' e, novamente, a string 'string' é convertida em um número antes de ser comparada a 0, e então se torna SELECT 0 = 0 que é verdade.

Isso também funcionará:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

e retornará a soma das strings convertidas em números (1 + 2 neste caso).