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;


表數據: 

ID USER_NAME AGE COUNTRY USER_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', '')

查詢結果:

ID USER_NAME AGE COUNTRY USER_STATUS
1 周傑倫 33 中國 1
3 歡歡 21 美國 0

問題:

把USER_STATUS為0的數據查出來了,而我當時只需要狀態為1的數據

 

后來發現是由於MySql中會將''空字符串當做數值0來處理

而當時這么寫是由於業務需求有要求,我們為了開發方便,就在只查單個狀態時,想要加上一個查不出其他狀態數據的條件,我們的處理方案是

將字段類型改為varchar類型

再使用相同的查詢sql后,數據正常顯示

雖然最后我們找到了問題所在, 但是這種sql還是感覺不夠整潔, 因此我們又在生成sql前進行了數據的處理, 當只需要一種狀態時,就只查一種狀態的值,在sql不出錯的情況下又保證了整潔性, 在此記錄下這個踩過的坑。

才疏學淺,如文中有錯誤,感謝大家指出。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM