rails使用mysql时text超出范围解决办法

2015-10-30 173870

转载:http://rails.clickyourstyle.com/articles/51

当我提交一个内容保存到数据库中时,出现了以下报错提示:Data too long for column。我使用的是text类型,还是出了这个问题,很明显就是数据库中字段长度的问题。如果直接改数据库立马就能见效果,但是这样子做还是没有解决以后的问题,最好找到根源的办法。google了好久,终于在一个日本人那里找到了解决办法

MySQLのテーブルをmigrationで作成するとき、以下のようにtext型が指定された属性は、MySQLのTEXT型にマッピングされる。(デフォルト)

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :body
      t.timestamps
    end
  end
end

TEXT型は最大で65535Byteまでのデータを格納できる。これでも困らない場合は多いが、このデータ容量で足りない場合は、テーブル作成時または、後のmigrationで型を変更してやる必要がある。 テーブル作成時であれば以下のように:limitを指定してやる。

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :body, :limit => 4294967295
      t.timestamps
    end
  end
end

カラム型を変更する場合は、マイグレーションのchange_columnでも可能。

change_column :posts, :body, :text, :limit => 4294967295

ちなみにlimitに指定する値の範囲と対応する型は以下の通り。

min max
1 255 TINYTEXT
256 65535 TEXT
65536 16777215 MEDIUMTEXT
16777216 4294967295 LONGTEXT