Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql :pourquoi comparer une 'chaîne' à 0 ​​donne vrai ?

MySQL convertit automatiquement une chaîne en un nombre :

SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)

et une chaîne qui ne commence pas par un chiffre est évaluée comme 0 :

SELECT 'string' = 0 AS res;  -- res = 1 (true)

Bien sûr, lorsque nous essayons de comparer une chaîne avec une autre chaîne, il n'y a pas de conversion :

SELECT '0string' = 'string' AS res; -- res = 0 (false)

mais on peut forcer une conversion en utilisant par exemple un opérateur + :

SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

la dernière requête renvoie TRUE car nous additionnons une chaîne '0string' avec un nombre 0, donc la chaîne doit être convertie en nombre, elle devient SELECT 0 + 0 = 'string' puis à nouveau la chaîne 'chaîne' est convertie en nombre avant d'être comparée à 0, et elle devient alors SELECT 0 = 0 qui est VRAI.

Cela fonctionnera également :

SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

et renverra la somme des chaînes converties en nombres (1 + 2 dans ce cas).