Maison >base de données >tutoriel mysql >Comment MySQL gère-t-il le débordement lors de l'évaluation des expressions numériques ?

Comment MySQL gère-t-il le débordement lors de l'évaluation des expressions numériques ?

WBOY
WBOYavant
2023-08-24 10:05:021364parcourir

MySQL 如何处理数值表达式评估期间的溢出?

Comme nous savons que MySQL produira une erreur si un débordement se produit lors de l'évaluation des expressions numériques. Par exemple, le plus grand BIGNT signé est 9223372036854775807, donc l'expression suivante produira une erreur −

mysql> Select 9223372036854775807 + 1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'

MySQL peut gérer ce type de données. des débordements de la manière suivante :

EN CONVERTISSANT LA VALEUR EN NON SIGNÉ

MySQL permet ce type d'opérations en convertissant les valeurs en non signé comme suit −

mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1;
+------------------------------------------+
| CAST(9223372036854775807 AS UNSIGNED) +1 |
+------------------------------------------+
|                      9223372036854775808 |
+------------------------------------------+
1 row in set (0.07 sec)

En utilisant l'arithmétique des valeurs exactes

MySQL peut utiliser l'arithmétique des valeurs exactes pour traiter les expressions ci-dessus Mode. En effet, un débordement se produit en fonction de la plage des opérandes. Par exemple, le calcul ci-dessus peut être effectué en utilisant la valeur DECIMAL comme indiqué ci-dessous −

mysql> Select 9223372036854775807.0 + 1;
+---------------------------+
| 9223372036854775807.0 + 1 |
+---------------------------+
|     9223372036854775808.0 |
+---------------------------+
1 row in set (0.01 sec)

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer