關於mysql中int欄位傳入字串查詢引發的問題

2021-09-03 02:57:04 字數 545 閱讀 5021

昨天工作的時候,一位同事遇到了乙個很奇怪的問題,讓我過去看一下,重新整理了我對mysql的認知:)...具體什麼問題呢,如下圖

我帶入的ofirst條件是一串uuid,但是查詢出值為100的結果,知識庫明顯不夠用。

苦思了好幾分鐘,無從下手。然後我們部門的經理過來了,就問了一下他,他看了一眼就發現了問題的所在,開啟表結構一看。

這個字段居然是int型別的,原來mysql會隱式轉換,int型別的字段傳入字串會擷取從第一位int型開始到第乙個非int型的值作為條件。例如where a=35abc 相當於 where a = 35,再如where a = b35c 相當於where a = 0,在上面途中的uuid第一位為0,但是剛好1e2是乙個數**算氏,科學計數法,1e2=100。所以也就查出來了100的結果,可以說是相當的巧妙了,但是這也提醒了我們在資料庫表結構設計上的問題,這個字段應該設計為varchar型別。

吃一塹長一智,下次再碰到這樣的問題就不會無從下手了。

MySQL中欄位varchar和int排序的區別

首先我們建立乙個簡單的資料表,這個表只有兩個字段,id和a,a欄位的型別是int型別。我先的需求是對a欄位進行正序排列 select from test order by a asc 這個時候我們得到了想要的資料,如下圖 可是小童鞋,將a欄位建成了varchar型別,這個時候我們正序查詢,結果如下圖...

mysql中int 字段型別長度 問題解釋

這個可選的寬度規格說明是用於在數值顯示時,對某些值的寬度短於該列寬度的值進行左填補顯示的,而不是為了限制在該列中儲存值的寬度,也不是為了限制那些超過該列指定寬度的值的可被顯示的數字位數。注意,如果在乙個整型列中儲存乙個超過顯示寬度的更大值時,當 mysql 為某些複雜的聯結 join 生成臨時表時,...

Mybatis關於int型別欄位的判斷

出現問題 有乙個欄位waternum 為int型別,在更新語句時判斷不為null或空字串時,更新該欄位,問題在於,當waternum為0的時候,該字段不更新了 示例 waternum if 問題原因 mybatis在判斷int型別時,0認為是空字串,因為加了waternum 所以該判斷為false,...