背景與探索
最近在做一個簡單的用戶信息的查詢及展示,其中在對用戶性別判斷的時候,出現(xiàn)了一個神奇的情況,首先數(shù)據(jù)庫里有個表存儲了性別字段 sex ,字段類型是:enum('0','1') DEFAULT NULL COMMENT '性別(0/女,1/男)'
整體表結構如下:
CREATE TABLE `user` (
`userid` int(10) unsigned NOT NULL COMMENT '登錄賬號ID',
`sex` enum('0','1') DEFAULT NULL COMMENT '性別(0/女,1/男)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='個人基礎信息';
表中數(shù)據(jù)如下:

image.png
然后寫了個簡單的sql來判斷男女,如下:
SELECT userid,if(sex=1,'男','女') as '性別' from user

image.png
發(fā)現(xiàn)顯示的結果跟數(shù)據(jù)庫存儲的是完全相反的,但是的第一反應是不是判斷反了,結果反復核實了幾遍并沒有判斷反,然后看數(shù)據(jù)庫存儲的字段是枚舉,心里想著說是不是類型問題導致的,結果將sex=1改成sex=‘1’,結果就對了,sql如下:
SELECT userid,if(sex='1','男','女') as '性別' from user

image.png
結論與總結
從上面的例子中我們知道,mysql對字符型的判斷不能直接轉換成數(shù)字,必須要跟對應的字符比較才能得到正確的結果,這個問題是平時很少注意到的問題,但是為什么當sex的值是'1'與1比較是false,sex值是'0'與1比較是true這個目前還沒有搞清楚原理。