我在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
我环顾四周,无法弄清楚这里出了什么问题。
非常感谢提前。
答案 0 :(得分:1)
在使用2.0
和precision 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