在mysql中,字段型別為float的字段,如果不指定float的長度和小數點位數,要根據float欄位的值精確查詢,結果會是空;
原因是在mysql中,float是浮點數,
mysql儲存的時候是近似值,所以用精確查詢無法匹配;但可以用like去匹配。
如果只用到mysql資料庫,不需要多庫關聯,針對小數型別的字段,可以使用decimal欄位型別,decimal資料型別最多可儲存 38 個數字,它儲存了乙個準確(精確)的數字表達法,不儲存值的近似值。
也可以在建立欄位時指定float的長度和小數點位數。
這樣指定小數點後的長度後 就能搜到值了。如下
`is_ordered` tinyint(1) not null default '0' comment '當天此房間是否被預定',
primary key (`id`),
key `id` (`id`),
key `goods_attr_id` (`goods_attr_id`),
key `starttime` (`starttime`),
key `endtime` (`endtime`),
key `title` (`title`)
) engine=myisam auto_increment=10261 default charset=utf8
create table `calendar` (
`id` int(11) not null auto_increment,
`title` float(20,2) default null,
`starttime` int(11) not null,
`endtime` int(11) default null,
`allday` tinyint(1) not null default '0',
`color` varchar(20) default null,
`goods_attr_id` int(11) not null default '0',
`is_ordered` tinyint(1) not null default '0' comment '當天此房間是否被預定',
primary key (`id`),
key `id` (`id`),
key `goods_attr_id` (`goods_attr_id`),
key `starttime` (`starttime`),
key `endtime` (`endtime`),
key `title` (`title`)
) engine=myisam auto_increment=10261 default charset=utf8
select * from calendar where title ='1.11' #因為上面設計的是浮點型的,所以這樣搜不到,,只能搜 title 是字元型的。
select * from calendar where title =1.11 這樣才可以
where 後的比較型別。
mysql中float型別使用總結
對於單精度浮點數float 當資料範圍在 131072 65536 2 以內的時候,float資料精度是正確的,但是超出這個範圍的資料就不穩定,沒有發現有相關的引數設定建議 將float改成double或者decimal,兩者的差別是double是浮點計算,decimal是定點計算,會得到更精確的資...
float型別解析
浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...
Mysql的float型別造成的困擾總結
因為換了工作正在學習使用mysql,今天領導提出了乙個問題,如下 x列是累加值,a列是每日新增值,那麼x2應該是x1 a2,而且儲存過程裡也是這樣計算的。可是奇怪的是x2的值卻總是和正確值 2396116766 有一定的差異。於是我手工進行了update,但是沒有辦法,資料永遠是 239611673...