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