Comparaison de chaînes à zéro dans MySQL : dévoiler la vérité
Lorsque l'on compare des colonnes de chaînes avec zéro dans MySQL, un comportement surprenant est révélé : le le résultat est évalué à vrai. Cela se produit dans des scénarios tels que :
select 'string' = 0 as res; -- res = 1 (true)
Cependant, comparer la même chaîne à d'autres nombres, à la fois positifs et négatifs, donne le faux résultat attendu. Cette incohérence soulève la question : pourquoi cette anomalie se produit-elle ?
Derrière la magie des chaînes
MySQL convertit silencieusement les chaînes en nombres lors des comparaisons. Pour les chaînes qui ne commencent pas par un nombre, la conversion renvoie zéro. Cela explique pourquoi :
select 'string' = 0 as res; -- res = 1 (true)
Contrôler la conversion
Bien que MySQL gère souvent les conversions automatiquement, les forcer à utiliser des opérateurs comme « » peut être utile. Considérez ceci :
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Dans cette requête, la chaîne « 0string » est ajoutée à zéro, provoquant sa conversion en nombre. Par la suite, la chaîne convertie « string » est comparée à zéro, déclenchant à nouveau une conversion. La comparaison qui en résulte s'effectue entre des valeurs numériques, ce qui donne vrai.
Les conversions automatiques de chaînes de MySQL s'étendent au-delà des comparaisons. Par exemple :
select '1abc' + '2ef' AS total; -- total = 1+2 = 3
Les chaînes sont converties en nombres avant l'addition, ce qui entraîne des opérations numériques correctes.
Comprendre ce mécanisme de conversion de chaînes aide à démystifier le comportement apparemment paradoxal des comparaisons de chaînes MySQL. Il permet aux développeurs d'exploiter efficacement cette fonctionnalité dans l'écriture de requêtes et la manipulation de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!