• 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不出错的情况下又保证了整洁性, 在此记录下这个踩过的坑。

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

  • 相关阅读:
    基于Redis主从复制读写分离架构的Session共享(Windows Server)
    第3章 线性表
    第2章 算法
    python中统计计数的几种方法和Counter的介绍
    Linux关于文件的权限笔记
    线程同步与互斥(线程安全)
    Python csv模块的使用
    Python 源码分析:queue 队列模块
    Java锁,真的有这么复杂吗?
    1537 学生干部虚基类
  • 原文地址:https://www.cnblogs.com/runningRookie/p/11108772.html
Copyright © 2020-2023  润新知