踩坑系列之《三》----- mysql之int与boolean

工作中有遇到这样一种情况:

数据库的status字段这么定义:

`status` int(11) DEFAULT NULL COMMENT '状态(0未支付/1交易成功/2交易关闭)'

那么我在列表筛选交易成功的时候应该这么写:

SELECT * from order where status = 1

后来再一次bug定位中发现同事的sql这么写:

SELECT * from tb_order where status = true

于是在自己觉得自己棒棒哒的时候:数据库sql测试的时候发现筛选结果没毛病啊!!!

神马???明明定义的整型,结果布尔筛选也可以!!!

原因:mysql是不支持bool类型的,默认会转换为int,这里指的是字段作为筛选,正因为这样,所以status=2的状态是无法通过ture或false筛选出来,但是status=0或1却可以

 

若将status定义为tinyint(1),查询出来的数据列表,状态值不管是1还是2还是3,都是"true"

在mysql中,Boolean=tinyint(1)

解决:

       1.修改tinyint类型的长度--tinyint(4)

  2.在查询的sql语句上面做修改----sql语句中,把这个状态字段*1,结果就会得到数据库存的值了(注意:记得加别名,不然查询出来的就是status*1 => '1')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值