Rails + MySQLでのblob型の扱い

RailsのMigrationで:binaryとするとMySQLではblob型になる。

create_table :files do |t|
  t.column :data, :binary
end

MySQLでのblob型

サイズ
TINYBLOB 256byte
BLOB 64KB
MEDIUMBLOB 16MB
LONGBLOB 4GB

Migrationでは:binaryしか選択肢がなくMySQLだとblob型として解釈される。
画像ファイルならば普通に大丈夫だけど他のファイルも扱うと苦しい。

SQLで直に属性を定義することでこの問題は解消する

class AlterModifyLongblob < ActiveRecord::Migration
  def self.up
    execute("alter table table_name modify column_name longblob")
  end

  def self.down
    execute("alter table table_name modify column_name blob")
  end
end

属性変更するならこんなMigration書いて実行すればlongblog型に変更される。
[asin:4274068668:detail]