mysql - GORM 是否存在以最大前缀开头的字段问题或 Float 字段存在问题

标签 mysql grails grails-orm

我有一个包含两个字段的域类:minscalemaxscale:

class TeamRuleAverageStatic extends TeamRule {
    Float minscale; 
    Float maxscale;

}

* 我使用 minscale=0.5maxscale=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 字段的查询效果很好

更新:

我使用 phphmyadmin 作为 GUI 手动执行 SQL 查询最佳实践,

我也遇到同样的问题。

当我将字段类型更改为 Double 时,它就可以工作了! 奇怪

确实,这是我遇到的奇怪的 IT 问题。 FLOAT 类型有什么问题?

最佳答案

您的问题是由表示 floatdouble 值的性质引起的。 两者都用于表示 float ,其中 float 表示单精度数,double 表示 double 。

MySQL 使用 4 个字节表示单精度值,使用 8 个字节表示 double 值。

来自 MySql manual :

Because floating-point values are approximate and not stored as exact values, attempts to treat them as exact in comparisons may lead to problems.

您可以尝试使用decimal而不是floatdouble,因为decimal在内部表示为字符串保证准确的精度。

关于mysql - GORM 是否存在以最大前缀开头的字段问题或 Float 字段存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212253/

相关文章:

Grails 域对象存储 Map<K,V>

mysql - 使用 Mule Studio 读取 CSV

php - 未定义常量项目的使用/未定义常量数据库的使用

php - 图片上传到文件夹而不是数据库

Grails 3.0.1 和休眠 session 错误

hibernate - 用于检查 hasMany 关联是否包含某些实体的 Grails/Hibernate 标准

mysql - 显示user_id到用户名

mysql - Grails Web 应用程序为远程数据库生成 MySql 重复条目,但不为本地测试数据库生成

grails - Grails事件:在构建时复制目录以获得干净的 'multi-tenant'部署效果

grails - 有人可以建议学习grails 3上快速刻线的最佳方法吗?