场景:数据库
字段:status (值为1,2,3)url
类型:tinyint 长度:1(有符号的)spa
结果:查询出来的数据列表,状态值无论是1仍是2仍是3,都是"boolean true"code
分析并解决:blog
分析:因为MySql中没有boolean类型,因此会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]ip
解决:tinyint类型长度的问题,当我把长度改为4时,查询结果就正常了utf-8
猜测并使用新的方法解决:字符串
若是不改变类型的长度,怎么让查询的结果正确呢?须要在查询语句上面作修改了
在你须要执行的sql语句中,把这个状态字段*1,结果就会获得数据库存的值了(注意:记得加别名,否则查询出来的就是status*1 => '1')
SELECTid,
name,
status*1 ASstatus,
add_timeFROMtableNameWHEREplay_type= 0
总结一下以上的两种解决方法:
1.修改tinyint类型的长度
2.在查询的sql语句上面作修改
因此由这里能够看出,当你使用tinyint[1]来存储超过0,1两个值之外的值,好比存储2,那这个2就是脏数据就用tinyint[4],tinyint[1]只适用于存储0和1两个值,也即真和假,true和false
通常的,我们若是存的是纯数字的话,建议用tinyint,若是是字符串,且是固定长度的,建议用char,而enum的枚举字段,使用的使用须要慎重考虑,避免带来没必要要的麻烦
还有一种方式是在链接url上添加 tinyInt1isBit=false :
url: jdbc:mysql://192.168.17.107:3306/oip_back?useUnicode=true&characterEncoding=utf-8&useSSL=false&tinyInt1isBit=false