mysql数据库tinyint类型(长度1)程序中查询,0会变成false,1-9会变成true

存在tinyint中的2-9,程序查询时都会变成1,数据库查询工具中仍显示为原值。
数据库一个表中有一个tinyint类型的字段,值为0或者1,如果取出来的话,0会变成false,1会变成true。

MySQL保存boolean值时用1代表TRUE,0代表FALSE。boolean在MySQL里的类型为tinyint(1)。MySQL里有四个常量:true,false,TRUE,FALSE分别代表1,0,1,0。

场景:

字段:level (值为1,2,3,4,5)

类型:tinyint 长度:1(有符号的)

结果:查询出来的数据列表,状态值不管是1还是2还是3,都是"boolean true"

分析并解决:

分析:由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]

解决方法一:tinyint类型长度的问题,当我把长度改成4时,查询结果就正常了

猜想并使用新的方法解决:

解决方法二:如果不改变类型的长度,怎么让查询的结果正确呢?需要在查询语句上面做修改了,在你需要执行的sql语句中,把这个状态字段1,结果就会得到数据库存的值了(注意:记得加别名,不然查询出来的就是status1 => ‘1’)

    解决方法三:在 jdbc 连接上加上如下配置即可解决问题, &tinyInt1isBit=false&transformedBitIsBoolean=false

总结一下以上的三种解决方法:

1.修改tinyint类型的长度

2.在查询的sql语句上面做修改

   3.在 jdbc 连接上加 &tinyInt1isBit=false&transformedBitIsBoolean=false

所以由这里可以看出,当你使用tinyint[1]来存储超过0,1两个值以外的值,比如存储2,那这个2就是脏数据就用tinyint[4],tinyint[1]只适用于存储0和1两个值,也即真和假,true和false

一般的,咱们如果存的是纯数字的话,建议用tinyint,如果是字符串,且是固定长度的,建议用char,而enum的枚举字段,使用的使用需要慎重考虑,避免带来不必要的麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值