mysql 查询有 float 类型的字段查不到
生活随笔
收集整理的這篇文章主要介紹了
mysql 查询有 float 类型的字段查不到
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題
之前在用 mysql 查詢有 float 字段的時候,比如某一個字段 fee,明明有一條是 fee 為 1.99 的記錄,但是就是查不到??
后面查了一下,發現原來查詢 float 字段是有坑的:
原來在 MYSQL 中,字段類型為 float 的字段,如果不指定 float 的長度和小數點位數,要根據 float 字段的值精確查找,結果會是空,原因是在 mysql 中,float是浮點數,Mysql存儲的時候是近似值,所以用精確查找無法匹配;但可以用like去匹配。
一、解決方法
將float 改為 double 類型,不會出現這種問題,但是如果數據庫中數據量龐大,或者修改量太大,則不適合這個方法.這個方法只適合設計數據庫的初期階段。
原因是這樣的:10.28,這樣的浮點值在電腦存放為 10.27999973297119140625 這種形式,同時務必注意:修改表字段類型,需要在當前表中無數據的時候修改,如果有數據的話,那已有浮點數據將會出現很多小數點。
如果提前知道要查詢的 float 字段的值的精度的話,只要設置float的精度然后進行查詢也是可以的,比如本例中,1.99 就是兩個精度,那么就可以這樣查詢:
select * from fee_mode where format(fee,2) = format(1.99,2);這樣也是可以的。
使用了concat函數,將浮點數用空字符串連接起來,轉換成字符串來進行查詢:
select * from fee_mode where is_pp_recurring = 1 and is_enable = 1 AND concat(fee, '') = '1.99'
文章轉自
總結
以上是生活随笔為你收集整理的mysql 查询有 float 类型的字段查不到的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-2021网络游戏行业人才招聘报
- 下一篇: linux cmake编译源码,linu