15

tinyint(4)在 Ruby on Rails 中,迁移中的以下代码在 MySQL 中创建类型列:

create_table :great_table do |t|
    t.integer :step_position, :limit => 1 #tinyint
end

我将如何创建类型tinyint(2)或的列tinyint(3)

4

4 回答 4

21

对于 tinyint(2)

create_table :great_table do |t|
  t.integer :step_position, :limit => 2
end

对于 tinyint(3)

create_table :great_table do |t|
  t.integer :step_position, :limit => 3
end
于 2014-09-15T19:17:54.817 回答
8

根据我在gem的源代码中看到的,你不能:

     # File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line   540  
     540:       def type_to_sql(type, limit = nil, precision = nil, scale = nil)
     541:         return super unless type.to_s == 'integer'
     542: 
     543:         case limit
     544:         when 1; 'tinyint'
     545:         when 2; 'smallint'
     546:         when 3; 'mediumint'
     547:         when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
     548:         when 5..8; 'bigint'
     549:         else raise(ActiveRecordError, "No integer type has byte size #{limit}")
     550:         end
     551:       end

type_to_sql

于 2014-01-30T02:31:22.320 回答
3

tinyint(4)首先,在 MySQL 中没有这样的东西。tinyint是一个字节的有符号整数。您可以检查文档中的所有整数类型。tinyint(1)您甚至可能在 Rails源代码中看到类似的东西,但我认为这是一个重言式,因为tinyint已经暗示了一个字节存储。

RailsTINYINT, SMALLINT, MEDIUMINT, INT, BIGINT在迁移中声明的方式是使用limit:适当的字节大小,如源代码中所示。

请注意,Rails 默认会将单字节整数视为布尔值,从上面的链接可以看出。

于 2017-10-26T08:30:05.727 回答
1

您可以:tinyint在 rails 迁移中用作列类型,并按之前的方式写入limit: 2limit: 3写入。

使用您的示例:

create_table :great_table do |t|
    t.tinyint :step_position, :limit => 1
end

应该管用。

于 2017-03-17T16:41:40.137 回答