ActiveRecord3.1/MySQLでBIGINT UNSIGNEDなid

ActiveRecord 3.1でMySQL2アダプタを使っている場合に、idカラム(プライマリキーのカラム)にBIGINT UNSIGNEDを使う方法。

まずCREATE TABLE時のidカラムの型を変更するために、ActiveRecordが読み込まれた直後、rakeタスク等でテーブルの作成が行われる前に次のように上書きする。

ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:primary_key] = \
  "BIGINT UNSIGNED DEFAULT NULL auto_increment PRIMARY KEY"

あとは各マイグレーションファイルで、外部キー(*_idってやつ)のカラムの型にBIGINT UNSIGNEDを指定する。

t.column :user_id, "BIGINT UNSIGNED"

これでidカラムも*_idカラムもBIGINT UNSIGNEDで作られる。

もし既存のテーブルの型を書き換えたい場合には、

change_column :users, :id, "BIGINT UNSIGNED"

でいけると思う(未確認)。

ただ、BIGINT UNSIGNEDだと0から1846京まで使えるらしいので、DB単体では破綻するような気がする。

参考