数据库一个表中有一个tinyint类型的字段,值为0或者1,若是取出来的话,0会变成false,1会变成true。mysql
MySQL保存boolean值时用1表明TRUE,0表明FALSE。boolean在MySQL里的类型为tinyint(1)。MySQL里有四个常量:true,false,TRUE,FALSE分别表明1,0,1,0。sql
场景:数据库
字段: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')
SELECT id, name, status*1 AS status, add_time FROM tableName WHERE play_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