记录一次因为mysql TINYINT类型设置过小导致的问题


今天突然收到邮件,生产环境出问题了,赶紧放下手头的工作进行问题排查。
出现问题的系统,是公司内部的财务系统,这出现问题可不是闹着玩的,赶紧进行排查。

问题描述

在这个财务系统中,涉及到公司几个分公司的财务状况,在系统中,标识公司采用的是位二进制(ID)进行存储,前段时间新增了一个新的公司(ID=128),在配置表中进行了相关字段的配置,测试后没啥问题,发到了生产环境,时隔两天收到bug邮件。

问题分析

经过一段时间分析,最后找主管看下生产环境数据库的字段类型,发现,在一个业务表中设置的来源公司的字段是tinyint(2),才发现是因为新公司的ID=128在写入这个表中的时候变成了127,导致生产环境出现问题。

问题解决

在mysql数据库中,int类型(包含其子类)的长度代表相应的字节数,比如(int 2) 表示 0-2的8次方减一,因此范围是0-127,在存入128时导致数据溢出,自动存储为了127,改下生产环境字段长度,问题得到解决。


作者:洋灰
原文链接:http://www.jianzhi12.com/2018/10/mysql-2/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章