在Rails迁移期间,MySQL错误为十进制的默认值

时间:2014-05-21 15:34:15

标签: mysql ruby-on-rails sqlite rake dbmigrate

我在Rails中设置我的生产数据库。该开发使用SQlite,生产在MySQL中。

在迁移过程中,我得到一个具有默认值的所有十进制列的无效默认值错误。这是一个例子。

ActiveRecord::StatementInvalid: Mysql2::Error: Invalid default value for 'retail_markup': CREATE TABLE `defaults` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `company_id` int(11), `styles_number_of_items_per_row` int(11), `created_at` datetime, `updated_at` datetime, `retail_markup` decimal(2,2) DEFAULT '2.0', `commission_rate` smallint DEFAULT 15) ENGINE=InnoDB

数据库架构如下:

 create_table "defaults", force: true do |t|
    t.integer  "company_id"
    t.integer  "styles_number_of_items_per_row"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.decimal  "retail_markup", precision: 2, scale: 2, default: 2.0
    t.integer  "commission_rate", limit: 2, default: 15
  end

我环顾四周,无法弄清楚这里出了什么问题。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

在使用2.0precision 2定义的小数字段上,您的默认值不能为scale 2

通过定义2的比例,2.0将变为2.00,需要3位有效数字来保存它。

如果您的零售标记只有1位小数,请将您的定义更改为:

t.decimal  "retail_markup", precision: 2, scale: 1, default: 2.0

或者,如果您需要允许2个小数位,请将您的定义更改为:

t.decimal  "retail_markup", precision: 3, scale: 2, default: 2.00