2011-12-26 6 views
3

Когда я бегуумолчанию, размер целого числа в Rails таблиц (MySQL)

rails g model StripeCustomer user_id:integer customer_id:integer 
annotate 

Я получил

# == Schema Information 
# Table name: stripe_customers 
# id   :integer(4)  not null, primary key 
# user_id  :integer(4) 
# customer_id :integer(4) 
# created_at :datetime 
# updated_at :datetime 

Означает ли это, я могу только задержать только 9,999 записей? (Я довольно удивляюсь, насколько небольшой размер по умолчанию для ключей). Как изменить идентификаторы по умолчанию на 7 цифр в существующих таблицах?

спасибо.

ответ

2

Хотя describe командования MySQL клиента действительно использует ширину отображения (см docs), информацию о схеме идет речь в ФПЕ является очень вероятно, порожденной annontate_models gem «s get_schema_info метода, который использует предела атрибут каждых колонка. А атрибут limit - это количество байтов для: двоичных и целых столбцов (см. docs).

Метод чтения (посмотреть, как последняя строка добавляет предел):

def get_schema_info(klass, header, options = {}) 
    info = "# #{header}\n#\n" 
    info << "# Table name: #{klass.table_name}\n#\n" 

    max_size = klass.column_names.collect{|name| name.size}.max + 1 
    klass.columns.each do |col| 
    attrs = [] 
    attrs << "default(#{quote(col.default)})" unless col.default.nil? 
    attrs << "not null" unless col.null 
    attrs << "primary key" if col.name == klass.primary_key 

    col_type = col.type.to_s 
    if col_type == "decimal" 
     col_type << "(#{col.precision}, #{col.scale})" 
    else 
     col_type << "(#{col.limit})" if col.limit 
    end 

    #...   
end 
2

Rails фактически означает 4 байта здесь, т.е. тип стандартной MySQL целочисленного (см docs)

+0

вы правы , Я отредактировал свой ответ соответственно. – maprihoda