MySQL中有時候需要將字符串轉成數字類型進行計算,但是如果字符串轉成數字時,超出數字類型所能表示的范圍就會發生溢出。下面我們來看一個例子:
mysql>SELECT CAST('12345678901234567890' AS SIGNED); +-----------------------------+ | CAST('12345678901234567890' AS SIGNED) | +-----------------------------+ | 2147483647 | +-----------------------------+
上述例子中,我們將一個超出INT類型范圍的字符串轉成了SIGNED類型的數字,結果卻出現了意料之外的情況。出現這種情況的原因是MySQL在將字符串轉成數字類型時,會先將其轉成整數類型(INT類型),而整數類型的范圍是-2147483648~2147483647,因此字符串的值超出該范圍后就會產生溢出,最后得到的結果是INT類型最大值2147483647。
如果我們需要將一個較大的字符串轉成數字類型,可以使用BIGINT類型來避免溢出:
mysql>SELECT CAST('12345678901234567890' AS BIGINT); +--------------------------------------+ | CAST('12345678901234567890' AS BIGINT) | +--------------------------------------+ | 12345678901234567890 | +--------------------------------------+
通過使用BIGINT類型,我們成功將超出INT類型范圍的字符串轉成了數字類型,并避免了溢出問題。