MySql查询整型字段空字符时出现为0的数据

表结构:

-- 表的ddl
CREATE TABLE `user_desc` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `USER_NAME` varchar(255) DEFAULT NULL COMMENT '用户名',
  `AGE` int(5) DEFAULT NULL COMMENT '年龄',
  `COUNTRY` varchar(50) DEFAULT NULL COMMENT '国家',
  `USER_STATUS` varchar(5) DEFAULT '1' COMMENT '用户状态(0:弃用,1:在线,2:下线)',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


表数据: 

IDUSER_NAMEAGECOUNTRYUSER_STATUS
1周杰伦33中国1
2胡歌22中国2
3欢欢21美国0

查询Sql 

-- 查询sql,查询用户状态为在线的, 并拼接一个计划中应查不到数据的参数
SELECT
    ID,
    USER_NAME,
    AGE,
    COUNTRY,
    USER_STATUS
FROM
    user_desc
WHERE
    USER_STATUS IN ('1', '')

查询结果:

IDUSER_NAMEAGECOUNTRYUSER_STATUS
1周杰伦33中国1
3欢欢21美国0

问题:

把USER_STATUS为0的数据查出来了,而我当时只需要状态为1的数据

 

后来发现是由于MySql中会将''空字符串当做数值0来处理

而当时这么写是由于业务需求有要求,我们为了开发方便,就在只查单个状态时,想要加上一个查不出其他状态数据的条件,我们的处理方案是

将字段类型改为varchar类型

再使用相同的查询sql后,数据正常显示

虽然最后我们找到了问题所在, 但是这种sql还是感觉不够整洁, 因此我们又在生成sql前进行了数据的处理, 当只需要一种状态时,就只查一种状态的值,在sql不出错的情况下又保证了整洁性, 在此记录下这个踩过的坑。

才疏学浅,如文中有错误,感谢大家指出。  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值