事情是这样的:数据库中有一个字段是 tinyint(4) 类型,这个返回 是在 -128~127之间,线上操作之前是返回资源不够,然后我就一直找那选择资源的地方问题,拿dba 发给我数据进行模拟查找,怎么都发现没有问题,由于这个比较着急,所以晚上我不得不加班在这一个人来回反复排查原因,本地没法模拟线上,折腾到11点,后来实在找不出来,眼睛疼,我就回家了,第二天一早我又问,他居然告诉我后来是数据库插入失败,我就开始找问题,很快定位找到了,是因为其中插入的值大于127,导致操作失败,我那时候是一个恨啊,所以我把它写下,以后注意mysql字段类型,特别是这些bit, smallint 等类型,要注意,再次我学习了大概几种这样的类型值范围,再次贴下:
1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是
-128到127
1.BIT[M]
位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
3. BOOL,BOOLEAN
是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。
4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
6. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。