Maison > base de données > tutoriel mysql > Pourquoi MySQL traite-t-il « chaîne » comme 0 dans les comparaisons numériques ?

Pourquoi MySQL traite-t-il « chaîne » comme 0 dans les comparaisons numériques ?

DDD
Libérer: 2024-12-10 16:10:11
original
217 Les gens l'ont consulté

Why Does MySQL Treat 'string' as 0 in Numeric Comparisons?

Bizarres de comparaison numérique : la « chaîne » surprenante de MySQL à 0 Évaluation

Dans MySQL, un comportement inattendu apparaît lors de la comparaison d'une « chaîne » à 0. Bien que le raisonnement logique suggère un résultat faux, il donne étonnamment vrai. Cette anomalie provient de la conversion automatique par MySQL des chaînes en nombres lors des comparaisons.

Si une chaîne commence par un caractère numérique, MySQL la convertit en valeur numérique. Cependant, les chaînes sans préfixes numériques sont traitées comme des 0. Ainsi, 'string' est converti en 0, ce qui entraîne une véritable comparaison à 0.

Ce comportement est évident dans l'exemple où une colonne de chaîne est comparée à 0 :

select 'string' = 0 as res; -- res = 1 (true)
Copier après la connexion

Dans Par contraste, les comparaisons avec d'autres nombres, entiers et décimaux, renvoient false comme prévu :

select 'string' = -12 as res; -- res = 0 (false)
select 'string' = 3131.7 as res; -- res = 0 (false)
Copier après la connexion

Cependant, lorsque l'on compare la chaîne avec '0' comme chaîne, le résultat est faux :

select 'string' = '0' as res; -- res = 0 (false)
Copier après la connexion

Pour forcer une conversion, des opérateurs comme ' ' peuvent être utilisés :

select '0string' + 0 = 'string' AS res; -- res = 1 (true)
Copier après la connexion

Cette requête garantit que '0string' est converti en nombre avant la sommation. Par la suite, « chaîne » est également convertie en nombre, ce qui entraîne une comparaison numérique.

Comprendre ce comportement de conversion est crucial pour éviter des résultats inattendus dans les requêtes MySQL. En tirant parti des opérateurs qui convertissent explicitement les chaînes en nombres, les développeurs peuvent garantir des comparaisons précises et éviter d'éventuels malentendus.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal