Mysql Rails 3和保存表单中的十进制值
我的一个应用程序中有一个奇怪的bug 当我使用sqlite3数据库时,错误并不存在。然而,当我使用mysql2作为数据库适配器时,我在保存表单中的十进制值时遇到了一个错误 如果我提交值19.99,则在删除小数点后,我的输入将作为19.00存储在数据库中 这是什么原因造成的?数据库具有正确的列设置,我可以使用rails控制台创建正确的记录Mysql Rails 3和保存表单中的十进制值,mysql,ruby-on-rails,forms,Mysql,Ruby On Rails,Forms,我的一个应用程序中有一个奇怪的bug 当我使用sqlite3数据库时,错误并不存在。然而,当我使用mysql2作为数据库适配器时,我在保存表单中的十进制值时遇到了一个错误 如果我提交值19.99,则在删除小数点后,我的输入将作为19.00存储在数据库中 这是什么原因造成的?数据库具有正确的列设置,我可以使用rails控制台创建正确的记录 编辑:当我真的想说十进制时,我说的是整数。我认为这可能是以下几种可能性之一: Rails模型(或控制器中的某个步骤)中的验证是在保存到数据库之前将值设置为整数,
编辑:当我真的想说十进制时,我说的是整数。我认为这可能是以下几种可能性之一:
INSERT
操作,并查看Rails试图放入的数据19.99
,而不是19.00
,则两个数据库中的数据类型很可能存在微小差异。检查MySQL数据库是否只是没有存储小数位数为2或更高的小数。默认情况下,MySQL存储的数据类型精度为10,小数位数为0,因此不存储小数# 'up' portion of a new migration
def self.up
change_column :mymodel, :myfield, :decimal, :precision => 6, :scale => 2
end
值是否正确地保存在mysql表中?不,从rails日志中可以看到,它被正确地提交到mysql。我将看看是否可以在考虑SSCIRUS解决方案的情况下再次编辑我的迁移,并确保所有内容都是正确的。谢谢!你救了我一命,让我不至于因为这件事而大发雷霆。我一定是在迁移过程中输入了错误,或者只是没有像我应该检查的那样彻底。解决方案是在我的迁移中,在列定义的末尾添加:precision=>6,:scale=>2。如果在同一个表中有一组列要更改,您可能还会喜欢其他语法:change_table:mymodel do | t | t.change:myfield,:decimal,:precision=>6,:scale=>2这个问题和答案刚刚救了我。非常感谢。