Mysql GORM对以max前缀开头的字段有问题还是对浮点字段有问题
我有一个域类,它包含两个字段:Mysql GORM对以max前缀开头的字段有问题还是对浮点字段有问题,mysql,grails,gorm,Mysql,Grails,Gorm,我有一个域类,它包含两个字段:minscale,和maxscale: class TeamRuleAverageStatic extends TeamRule { Float minscale; Float maxscale; } * 我在数据库中以minscale=0.5和maxscale=0.9 当我试图查询它时,我什么也没有得到: TeamRuleAverageStatic.findByMinscaleAndMaxscale(new Float(0.5),new Fl
minscale
,和maxscale
:
class TeamRuleAverageStatic extends TeamRule {
Float minscale;
Float maxscale;
}
*
我在数据库中以minscale=0.5
和maxscale=0.9
当我试图查询它时,我什么也没有得到:
TeamRuleAverageStatic.findByMinscaleAndMaxscale(new Float(0.5),new Float(0.9));
我再次尝试,但没有嵌入maxscale:
TeamRuleAverageStatic.findByMinscale(new Float(0.5));
所以我得到了预期的结果
我还尝试:
TeamRule.executeQuery('from TeamRule cu where cu.maxscale = ? and cu.minscale= ?', [new Float(0.9),new Float(0.5)])
// As TeamRule is the class mother of TeamRuleAverageStatic
这个问题仍然存在。
似乎MAXSCALE
是一个以前缀“max”开头的关键字或字段,因为MINSCALE
字段的查询非常有效
更新:
我使用phmyadmin
作为GUI手动执行SQL查询的最佳实践
我也有同样的问题
当我将字段类型更改为Double
时,它会工作怪异
事实上,我遇到的是一个奇怪的it问题。
FLOAT
类型有什么问题?您的问题是由表示法FLOAT
和双值的性质引起的。
两者都用于表示浮点数,float
表示单精度,double
表示双精度数字
MySQL使用四个字节表示单精度值,八个字节表示双精度值
自以下日期起:
由于浮点值是近似值,而不是存储为精确值,因此在比较中尝试将其视为精确值可能会导致问题
您可以尝试使用decimal
而不是float
或double
,因为decimal
在内部表示为字符串以保证精确的精度。这很奇怪。您使用的是哪个数据库?您能找出针对DB执行的sql查询并将其发布到这里吗?谢谢。MySQL数据库。是的,我尝试使用SQL查询,pb也是一样的。这似乎是一个SQL问题