MySQLのテーブルをmigrationで作成するとき、以下のようにbinary型が指定された属性は、MySQLのblob型にマッピングされる。(デフォルト)
class CreateFiles < ActiveRecord::Migration
def change
create_table :files do |t|
t.string :title
t.binary :data
t.timestamps
end
end
end
BLOB型は最大で65535Byte(64KB)までのデータを格納できる。写真などのファイルなどをアップロードしてDBに放り込むようなアプリでは、ふつうこのデータ容量では足りない場合がおおいので、テーブル作成時または、後のmigrationで型を変更してやる必要がある。 テーブル作成時であれば以下のように:limitを指定してやる。
class CreateFiles < ActiveRecord::Migration
def change
create_table :files do |t|
t.string :title
t.binary :data, limit: 10.megabyte
t.timestamps
end
end
end
カラム型を変更する場合は、マイグレーションのchange_columnでも可能。
change_column :files, :data, :binary, :limit => 10.megabyte
ちなみにMySQLの型と、各limitの指定値の対応は以下の通り。
サイズ | 型 |
---|---|
256B | TINYBLOB |
64KB | BLOB |
16MB | MEDIUMBLOB |
4GB | LONGBLOB |
上記の例でlimit: 10.megabyteと指定した場合は、MEDIUMBLOBが対応します。