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単体では破綻するような気がする。