जैसा कि हम जानते हैं कि यदि संख्यात्मक एक्सप्रेशन के मूल्यांकन के दौरान ओवरफ्लो होता है तो MySQL एक त्रुटि उत्पन्न करेगा। उदाहरण के लिए, सबसे बड़ा साइन BIGINT 9223372036854775807 है, इसलिए निम्नलिखित एक्सप्रेशन त्रुटि उत्पन्न करेगा:
mysql> Select 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807+1)'
MySQL निम्नलिखित तरीकों से ऐसे ओवरफ्लो को संभाल सकता है:
मान को UNSIGNED में बदलकर
MySQL मानों को अनसाइन्ड में बदलकर इस तरह के ऑपरेशन को सक्षम करता है:
mysql> Select CAST(9223372036854775807 AS UNSIGNED) +1; +------------------------------------------+ | CAST(9223372036854775807 AS UNSIGNED) +1 | +------------------------------------------+ | 9223372036854775808 | +------------------------------------------+ 1 row in set (0.07 sec)
सटीक-मान अंकगणित का उपयोग करके
MySQL पूर्ववर्ती एक्सप्रेशन को संभालने के लिए सटीक-मान अंकगणित का उपयोग कर सकता है। ऐसा इसलिए है क्योंकि ओवरफ्लो ऑपरेंड की रेंज पर निर्भर करता है। उदाहरण के लिए, उपरोक्त गणना DECIMAL मान का उपयोग करके की जा सकती है:
mysql> Select 9223372036854775807.0 + 1; +---------------------------+ | 9223372036854775807.0 + 1 | +---------------------------+ | 9223372036854775808.0 | +---------------------------+ 1 row in set (0.01 sec)