RailsでMySQLのMEDIUMBLOBを使いたいとき

型をt.binaryなどとすると、デフォルトではBLOBとなってしまい、64KiBまでしか保存できなくなってしまいます。そこで:limit => 1.megabyteとオプションで制限を大きめに書いてやると、Railsが勝手に拡張してMEDIUMBLOBにしてくれます。


class CreateImages < ActiveRecord::Migration
  def self.up
    create_table :images do |t|
      t.binary  :data, :limit => 1.megabyte
      t.integer :stat

      t.timestamps
    end
  end

  def self.down
    drop_table :images
  end
end
mysql> desc imags;
+----------------+------------+------+-----+---------+----------------+
| Field          | Type       | Null | Key | Default | Extra          |
+----------------+------------+------+-----+---------+----------------+
| id             | int(11)    | NO   | PRI | NULL    | auto_increment |
| data           | mediumblob | YES  |     | NULL    |                |
| stat           | int(11)    | YES  |     | NULL    |                |
| created_at     | datetime   | YES  |     | NULL    |                |
| updated_at     | datetime   | YES  |     | NULL    |                |
+----------------+------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
 
comments powered by Disqus