Rails 迁移过程中默认十进制值的 MySQL 错误

标签 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

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

非常感谢。

最佳答案

在用 precision 2scale 2 定义的小数字段上不能有默认值 2.0

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

如果您的零售加价只有一位小数,请将您的定义更改为:

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

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

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

关于Rails 迁移过程中默认十进制值的 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787773/

相关文章:

android - Sqlite 数据库 onCreate 参数

python - 操作错误: unable to open database file in PyCharm with Flask IDE plug-in

php - Magento 集合 : field occurrence counting

php - 将 session 变量存储从全部更改为个人后,登录表单不起作用

php - 从考虑中删除 5 个最新记录

ruby-on-rails - 我的 Ruby 脚本(自动使用 Whenever gem)没有运行..我做错了什么?

ruby-on-rails - 如何在大 CSV 出错后重试 Postgres COPY

mysql - 如何创建一个 SQL 调用,以递归方式将 DISTINCT id 和父 id 合并到一个列中?

ruby-on-rails - rails 4 : Redirect to another action with js

sql - 使用 Perl 将简化的 SQL 查询解析为 SQLite