原因是在mysql中,float是浮点数,Mysql存储的时候是近似值,所以用精确查找无法匹配;但可以用like去匹配。
如果只用到Mysql数据库,不需要多库关联,针对小数类型的字段,可以使用decimal字段类型,decimal数据类型最多可存储 38 个数字,它存储了一个准确(精确)的数字表达法,不存储值的近似值。
也可以在创建字段时指定float的长度和小数点位数。
这样指定小数点后的长度后 就能搜到值了。如下
show CREATE table `calendar`
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
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 后的比较类型。