このエントリーをはてなブックマークに追加
2013-08-09 21:10:00 +0900

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が対応します。




記事一覧へ