Mysql中關(guān)于0值判斷的坑及解決
Mysql關(guān)于0值判斷的坑
最近遇到一個(gè)Mysql返回多值的問題,最后發(fā)現(xiàn)是mysql過濾條件中0值判斷的問題。
簡(jiǎn)練問題如下
有個(gè)INT字段a,默認(rèn)值為0,程序傳入的判斷條件是 a = 'abacd'。
傳入的是一個(gè)字符串,結(jié)果a=0的所有數(shù)據(jù)都返回了。
原因
mysql會(huì)在邏輯判斷時(shí),如果是整型判斷,但是傳入的是字符串,如果字符串不是數(shù)字,則字符串會(huì)被轉(zhuǎn)換為0。所以,
這段代碼實(shí)際判斷的條件是 a = 0。
解決方式
mysql中的邏輯判斷,判斷值的傳入,應(yīng)該與字段類型一致,整型判斷整型,字符串判斷字符串。如果避免不了,跨類型的判斷,那么就需要根據(jù)業(yè)務(wù)邏輯,進(jìn)行調(diào)整,避免掉入這個(gè)坑。
問題引申
如果字段a是否varchar類型,值為0,那么判斷時(shí)應(yīng)該用 a='0'判斷,而不是 a = 0 判斷,原因與上面的原因一致,字符串會(huì)被轉(zhuǎn)換為0,結(jié)果最終判斷的是 0 = 0。
Mysql判斷數(shù)值0誤區(qū)總結(jié)
mysql中判斷數(shù)據(jù)表字段是否為0,當(dāng)前數(shù)據(jù)表字段為int類型時(shí),沒有問題。若為char或者varchar類型時(shí),則需要使用'0',顯而易見,字符串和整型是不能等同的。所以不要 犯這么低級(jí)的錯(cuò)誤。
以下是從網(wǎng)上搜索到的mysql搜索的原理:
mysql會(huì)把字段的值先轉(zhuǎn)成整數(shù),然后再對(duì)比。
如果字段的第一位是字符串,那么轉(zhuǎn)成整數(shù)就是0了,
一般對(duì)字符串的搜索都要加上引號(hào)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)詳解
binlog日志用于記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的所有語句,下面這篇文章主要給大家介紹了關(guān)于Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄,需要的朋友可以參考下。2011-12-12MySql如何將查詢的出來的字段進(jìn)行轉(zhuǎn)換
這篇文章主要介紹了MySql如何將查詢的出來的字段進(jìn)行轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解

mysql id從1開始自增 快速解決id不連續(xù)的問題