表結構:
-- 表的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不出錯的情況下又保證了整潔性, 在此記錄下這個踩過的坑。
才疏學淺,如文中有錯誤,感謝大家指出。