Help us understand the problem. What is going on with this article?

ActiveRecordでbinary型をblob以外の型にする

More than 5 years have passed since last update.

ユーザーアイコン設定しようとして

$ rails g model User (略) icon:binary

ってしてたら
MySQLにblob型(最大64kb)で定義されてしまった。容量の大きいアイコンだと途中で切れてしまう事態に。

対応

例えばアイコンの上限値を700kbまで許可するように変更するのであれば、migrationファイルに以下のように書けばOK。

YYYYMMDDMMSS_change_user_icon_binary.rb
def up
  change_column :users, :icon, :binary, :limit => 700.kilobyte
end

もちろんCreateのときにやってもOK。
これで blob => mediumblob になってくれます。

ただし、ここで700KBと指定したからといって701KB以上をエラーにしてくれるわけではなさそう。(未検証)
DBのテーブルににそんな制限はかかってないし、生成されるUser.rbにもそんな記述はないため。
そこはちゃんとModelにValidation処理を書かないとダメかなと思います。

あくまでここで指定された"limit"を許容する型にしてくれるというだけの動きだと思われます。

ちなみに

blob ラージバイナリ(最大 65535 bytes)
mediumblob ラージバイナリ(最大 1677215 bytes)
largeblob ラージバイナリ(最大 4294967295 bytes)

らしい。

PHP + MySQL 編1 - 項目型、テーブル作成、項目削除、件数制限問い合わせ - SAK Streets

ryonext
ITエンジニアです。2012年に子供が生まれました。 Ruby/Rails/iOS/enchant.js
http://ryonext.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away