Railsの移行を通じて固定長SQL列(たとえばCHAR(12))を定義する最良の方法は何ですか?
これがモデルで処理されるべきではない理由は、char()とvarchar()のパフォーマンスのためであり、データベースに生のSQLを挿入することは避けたいと思います。
編集:私は:limit修飾子を知っていますが、フィールドはまだvarchar(パフォーマンスに悪い)であり、最小サイズを許可していません。
Railsの移行を通じて固定長SQL列(たとえばCHAR(12))を定義する最良の方法は何ですか?
これがモデルで処理されるべきではない理由は、char()とvarchar()のパフォーマンスのためであり、データベースに生のSQLを挿入することは避けたいと思います。
編集:私は:limit修飾子を知っていますが、フィールドはまだvarchar(パフォーマンスに悪い)であり、最小サイズを許可していません。
Rails が列の型を認識しない場合は、そのままデータベースに渡します。したがって、varchar の代わりに char が必要な場合は、次のように置き換えます。
t.column :token, :string
と:
t.column :token, "char(12)"
もちろん、これにより、移行が別のデータベースに移植できなくなる場合とそうでない場合があります。
( http://laurelfan.com/2010/1/26/special-mysql-types-in-rails-migrationsへのクレジット)
def self.up
add_column("admin_users", "username", :string, :limit => 25)
end
def self.down
remove_column("admin_users", "username")
end
次のように、移行ファイルで制限オプション付きの文字列型を使用できます。
t.string :name, :limit => 12, :null => false