【发布时间】:2017-02-19 15:03:45
【问题描述】:
Rails 4.2.1 使用 mysql2 gem。 ActiveRecord 将数据类型为tinyint(1) 的mysql 列视为布尔值。但我想将它用作一个小数字 - 我想存储高达 100 的值,这对于 tinyint(1) 来说是可以的。当我尝试创建记录时,tinyint 列转换为 false,并且我收到了折旧警告:
> Foo.create(my_tinyint_col: 13)
(0.2ms) BEGIN
SQL (0.5ms) INSERT INTO `foos` (`my_tinyint_col`) VALUES (0)
(107.3ms) COMMIT
=> #<Foo ID: 519, my_tinyint_col: false>
弃用警告:您尝试分配的值不是 将
true或false显式添加到布尔列。目前这个值 转换为false。这将改变以匹配 Ruby 的语义,并将 在 Rails 5 中转换为true。如果你想保持当前 行为,您应该明确处理您想要转换的值 到false。
如果我将 my_tinyint_col 的数据定义更改为 tinyint(2),问题就会消失 - 但是有没有办法使用 ActiveRecord 将 tinyint(1) 视为数字?
【问题讨论】:
-
为什么要对每个字节大惊小怪?你有多少亿条记录?
标签: mysql ruby-on-rails activerecord