Mysql中關(guān)于0值判斷的坑及解決
Mysql關(guān)于0值判斷的坑
最近遇到一個Mysql返回多值的問題,最后發(fā)現(xiàn)是mysql過濾條件中0值判斷的問題。
簡練問題如下
有個INT字段a,默認(rèn)值為0,程序傳入的判斷條件是 a = 'abacd'。
傳入的是一個字符串,結(jié)果a=0的所有數(shù)據(jù)都返回了。
原因
mysql會在邏輯判斷時,如果是整型判斷,但是傳入的是字符串,如果字符串不是數(shù)字,則字符串會被轉(zhuǎn)換為0。所以,
這段代碼實際判斷的條件是 a = 0。
解決方式
mysql中的邏輯判斷,判斷值的傳入,應(yīng)該與字段類型一致,整型判斷整型,字符串判斷字符串。如果避免不了,跨類型的判斷,那么就需要根據(jù)業(yè)務(wù)邏輯,進行調(diào)整,避免掉入這個坑。
問題引申
如果字段a是否varchar類型,值為0,那么判斷時應(yīng)該用 a='0'判斷,而不是 a = 0 判斷,原因與上面的原因一致,字符串會被轉(zhuǎn)換為0,結(jié)果最終判斷的是 0 = 0。
Mysql判斷數(shù)值0誤區(qū)總結(jié)
mysql中判斷數(shù)據(jù)表字段是否為0,當(dāng)前數(shù)據(jù)表字段為int類型時,沒有問題。若為char或者varchar類型時,則需要使用'0',顯而易見,字符串和整型是不能等同的。所以不要 犯這么低級的錯誤。
以下是從網(wǎng)上搜索到的mysql搜索的原理:
mysql會把字段的值先轉(zhuǎn)成整數(shù),然后再對比。
如果字段的第一位是字符串,那么轉(zhuǎn)成整數(shù)就是0了,
一般對字符串的搜索都要加上引號。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django連接本地mysql數(shù)據(jù)庫(pycharm)的步驟
這篇文章主要介紹了Django連接本地mysql數(shù)據(jù)庫(pycharm)的步驟,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Linux7.6二進制安裝Mysql8.0.27詳細(xì)操作步驟
大家好,本篇文章主要講的是Linux7.6二進制安裝Mysql8.0.27詳細(xì)操作步驟,感興趣的同學(xué)快來看一看吧,希望對你起到幫助2021-11-11
mysql 5.7.17 winx64.zip安裝配置方法圖文教程
這篇文章主要為大家分享了mysql 5.7.17 winx64.zip安裝配置方法圖文教程,具有一定的參考價值,感興趣的朋友可以參考一下2017-02-02
探究MySQL中索引和提交頻率對InnoDB表寫入速度的影響
這篇文章主要介紹了MySQL中索引和提交頻率對InnoDB表寫入速度的影響,作者通過實際測試運行時間的對比來驗證,需要的朋友可以參考下2015-05-05
MySql 快速插入千萬級大數(shù)據(jù)的方法示例
這篇文章主要介紹了MySql 快速插入千萬級大數(shù)據(jù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲詳解
這篇文章主要給大家介紹了利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲的相關(guān)資料,文中詳細(xì)介紹了pt-heartbeat、監(jiān)控原理以及安裝過程等的相關(guān)內(nèi)容,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06
MySQL中查看表結(jié)構(gòu)的四種實現(xiàn)
本文主要介紹了MySQL中查看表結(jié)構(gòu)的四種實現(xiàn),包含DESCRIBE/DESC、SHOW COLUMNS、SHOW CREATE TABLE和INFORMATION_SCHEMA,具有一定的參考價值,感興趣的可以了解一下2025-02-02

