Mysql中關(guān)于0值判斷的坑及解決
Mysql關(guān)于0值判斷的坑
最近遇到一個(gè)Mysql返回多值的問(wèn)題,最后發(fā)現(xiàn)是mysql過(guò)濾條件中0值判斷的問(wèn)題。
簡(jiǎn)練問(wè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)該與字段類(lèi)型一致,整型判斷整型,字符串判斷字符串。如果避免不了,跨類(lèi)型的判斷,那么就需要根據(jù)業(yè)務(wù)邏輯,進(jìn)行調(diào)整,避免掉入這個(gè)坑。
問(wèn)題引申
如果字段a是否varchar類(lèi)型,值為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類(lèi)型時(shí),沒(méi)有問(wèn)題。若為char或者varchar類(lèi)型時(shí),則需要使用'0',顯而易見(jiàn),字符串和整型是不能等同的。所以不要 犯這么低級(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如何通過(guò)binlog日志恢復(fù)數(shù)據(jù)詳解
binlog日志用于記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的所有語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于Mysql如何通過(guò)binlog日志恢復(fù)數(shù)據(jù)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02mysql not in、left join、IS NULL、NOT EXISTS 效率問(wèn)題記錄
mysql not in、left join、IS NULL、NOT EXISTS 效率問(wèn)題記錄,需要的朋友可以參考下。2011-12-12MySql如何將查詢的出來(lái)的字段進(jìn)行轉(zhuǎn)換
這篇文章主要介紹了MySql如何將查詢的出來(lái)的字段進(jìn)行轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06mysql索引使用率監(jiān)控技巧(值得收藏?。?/a>
這篇文章主要給大家介紹了關(guān)于mysql索引使用率監(jiān)控技巧的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解
這篇文章主要介紹了mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03mysql id從1開(kāi)始自增 快速解決id不連續(xù)的問(wèn)題
這篇文章主要介紹了mysql id從1開(kāi)始自增 快速解決id不連續(xù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07MySQL中一條SQL查詢語(yǔ)句是如何執(zhí)行的
在寫(xiě)SQL查詢語(yǔ)句的時(shí)候,通常要考慮SQL語(yǔ)句的查詢效率,了解SQL查詢語(yǔ)句的執(zhí)行順序,可以讓我們寫(xiě)出更好的SQL語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于MySQL中一條SQL查詢語(yǔ)句是如何執(zhí)行的相關(guān)資料,需要的朋友可以參考下2022-04-04