mysql tinyint溢出

大部分开发语言基础部分基本类似,都有基础的数据类型,分别用不同的关键字表示不同范围的值。这些问题虽然都是一些很基础的问题,但是如果因为没有处理好这些问题,往往在修改BUG的时候是非常难被发现的。

场景还原:在数据库一张部门表中,同事甲把部门ID设置成int,部门ID是预约表的引用(但是没有添加外键约束) 。在预约表中部门ID的数据类型是tinyint,然而在项目实体模型中,同事乙预约表中的部门ID是int类型。前期由于分店不多(一个分店算一个部门),并没有发现什么问题。随着公司在全国的开拓业务,分店越来越多。部门表终于超过127条记录。因为部门ID是int类型,所以在加入数据的时候并没有什么异常。直到在一次APP预约中,App的同事说调用的接口数据不对。于是开始了BUG排查之旅。初看同事丙写的预约逻辑都没什么问题。在客户预约的信息中,数据库预约表中部门ID是127(正确值是131)。一步一步DEBUG,但是还是没找出问题。于是在调试的过程中获取插入的sql语句。获取到sql语句后,在sqlyog直接执行sql。发现预约表中存储部门ID依然是127(我录入的是131)。看到执行结果,我是一脸懵逼。于是在接下来的几次录入数据中发现预约表中部门ID依然是127。于是各种排查,最终看了一下数据库表的结构,发现在预约表的部门ID的数据类型为tinyint类型,这就解释了为什么当时入了部门ID的时候都是127。最终把数据库预约表中部门ID数据类型由tinyint修改成int后一切业务正常(一般情况下2个字节应该也可以满足要求了,smallint带符号的范围是-32768到32767。无符号的范围是0到65535)。

推荐文章