🚀
Rails migrationでintegerを使う時の注意点〜integerのlimitはバイト数だった〜
limitの定義に注意
マイグレーションファイルでintegerのカラムにlimitを定義する際に注意しないといけないことがある。
integerのlimitとstringのlimitでは意味合いが違う
例えば以下のように記述する。
t.integer :num, limit: 11, null: false, comment: "integerカラム"
t.string :str, limit: 100, null: false, comment: "stringカラム"
一見何も問題ないように見えるが以下のようなエラーがでる。
StandardError: An error has occurred, all later migrations canceled:
No integer type has byte size 11
/prj/db/migrate/20170620050536_tests.rb:3:in `change'
ActiveRecord::ActiveRecordError: No integer type has byte size 11
integerのlimitはバイト数だった
integerのlimitは桁数ではない。バイト数だった!
stringのlimitは桁数なのにね!
な!の!で!
num | int(11)
というカラムを作りたい場合のlimitは4です
t.integer :num, limit: 4, null: false, comment: "integerカラム"
limitに4以外を指定した場合に生成されるカラムは以下を参照してください。
Rails | マイグレーションで integer カラムを作る時の :limit は、桁数指定ではない ( バイト数指定だ )
Discussion