MySQL整型数据溢出的解决方法
今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题。经过很久的排查是数据类型溢出了(发生问题的版本是MySQL5.1)。后来通过给朋友那边把MySQL5.1升级到MySQL5.5去解决这个问题。这也让我有兴趣去了解一下MySQL不同版本数据类型溢出的处理机制。
先看一下MySQL支持的整型数及大小,存储空间:
pe
Storage
MinimumValue
MaximumValue
存储大小
(Bytes)
(Signed/Unsigned)
(Signed/Unsigned)
byte
TINYINT
1
-128
127
1byte
0
255
SMALLINT
2
-32768
32767
2bytes
0
65535
MEDIUMINT
3
-8388608
8388607
3bytes
0
16777215
INT
4
-2147483648
2147483647
4bytes
0
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
8bytes
0
18446744073709551615
另外请记着mysql的数据处理会转成bigint处理,所以这里就用bigint几个测试:
SELECTCAST(0ASUNSIGNED)-1;
SELECT9223372036854775807+1;