我有一个使用Rails 4迁移在MySQL中创建的表:
| nba_average_stats | CREATE TABLE `nba_average_stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ppg` decimal(2,0) DEFAULT '0',
`apg` decimal(2,0) DEFAULT '0',
`rpg` decimal(2,0) DEFAULT '0',
`tpm` decimal(2,0) DEFAULT '0',
`blk` decimal(2,0) DEFAULT '0',
`stl` decimal(2,0) DEFAULT '0',
`year` int(11) DEFAULT '0',
`player_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
我在这里遇到的问题是我做的事情:
stat.ppg = 4.3; stat.save
它在数据库中显示为整数4
我的数据库类型错了吗?我在Rails端做错了吗?
答案 0 :(得分:1)
您可能希望增加小数的比例:
https://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-characteristics.html
| nba_average_stats | CREATE TABLE `nba_average_stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ppg` decimal(2,1) DEFAULT '0',
`apg` decimal(2,1) DEFAULT '0',
`rpg` decimal(2,1) DEFAULT '0',
`tpm` decimal(2,1) DEFAULT '0',
`blk` decimal(2,1) DEFAULT '0',
`stl` decimal(2,1) DEFAULT '0',
`year` int(11) DEFAULT '0',
`player_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
decimal
的第一个参数是精度,第二个参数是比例。精度包括比例,因此精度必须始终大于或等于比例。 Scale是小数点后的位数。要存储上述示例中的值4.3
,您至少需要decimal(2,1)
,这意味着最多2位数,1位于小数点后。
将此更改为decimal(2,1)
可以将4.3
存储为4.3
,而不是向下舍入为4
。
由于您提到了Rails 4和迁移,您可以将精度和比例指定为迁移DSL中十进制列类型的可选参数。例如:
add_column :nba_stats, :ppg, :decimal, :precision => 2, :scale => 1
http://guides.rubyonrails.org/active_record_migrations.html#column-modifiers
答案 1 :(得分:0)
decimal(2,0)表示您只能存储整数。