LoginSignup
11
7

More than 5 years have passed since last update.

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

Posted at

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

$ 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

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7