Подтвердить что ты не робот

Rails: миграция для создания столбца char (12) с фиксированной длиной

Каков наилучший способ определения столбца SQL с фиксированной длиной (например, CHAR (12)) через миграцию Rails?

Почему это не должно обрабатываться моделью из-за производительности char() vs varchar(), и я хотел бы избежать ввода исходного SQL в базу данных.

Изменить: я знаю модификатор: limit, однако поле все равно varchar (что плохо для производительности) и не позволяет минимальный размер.

4b9b3361

Ответ 1

Если Rails не понимает тип столбца, он передает его прямо в базу данных. Поэтому, если вы хотите использовать char вместо varchar, просто замените:

t.column :token, :string

С

t.column :token, "char(12)"

Конечно, это может или не может сделать ваши миграции не переносимыми в другую базу данных.

(кредит http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrations)

Ответ 2

 def self.up
    add_column("admin_users", "username", :string, :limit => 25)
 end

 def self.down
    remove_column("admin_users", "username")
 end

Ответ 3

Вы можете использовать строковый тип с параметром ограничения в файле миграции следующим образом:

t.string :name, :limit => 12, :null => false

Ответ 4

Для конкретного типа базы данных мы можем теперь использовать:

t.column(:column_name, 'char(12)')

И для полного примера:

class Foo < ActiveRecord::Migration
  def change
     create_table :foo do |t|
       t.column(:column_name, 'custom_type')

       t.timestamps
     end
  end
end