Maison  >  Article  >  base de données  >  Pourquoi MySQL considère-t-il les comparaisons de chaînes avec zéro comme vraies ?

Pourquoi MySQL considère-t-il les comparaisons de chaînes avec zéro comme vraies ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-26 07:57:09680parcourir

Why Does MySQL Treat String Comparisons to Zero as True?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn