RailsをMySQLのBigIntサポートで「Schema.rb」を生成する方法は?
-
24-10-2019 - |
質問
Rails 3.0.5を使用しています。 MySQLをデータベースストレージとして使用しています。列の1つがBigintである必要があるモデルがあります。私は私の作成移行ファイルで以下を使用しています:
t.column :my_column_name, :bigint
正常に動作します。
しかし、私が走るとき
Rake DB:移動します
生成された「schema.rb」ファイルは、特定の列の次の行を作成します。
t.integer "my_column_name", :limit => 8
これは正しくありません。
私の質問は、私がどこに間違っているのかということです。正しい「schema.rb」ファイルを取得するために私がすべきことはありますか? 「schema.rb」ファイルの生成方法を変更できますか?
「schema.rb」ファイルが間違っているという事実は、「schema.rb」ファイルを使用してテストを実行し、ゼロから(テストを実行する前に)ゼロからdbを作成して作成する連続統合サーバーに問題を引き起こすことに注意してください。
解決
私は今それを理解しています
t.integer "my_column_name", :limit => 8
my_sqlドライバーを使用すると、schema.rbファイルが正しいです。
「schema.rb」ファイルを使用して生成されるデータベースは
bigint(20)
これは奇妙に思えるかもしれませんが。
My_sqlアダプターのコードを調査することでこれを見つけました。
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
return super unless type.to_s == 'integer'
case limit
when 1; 'tinyint'
when 2; 'smallint'
when 3; 'mediumint'
when nil, 4, 11; 'int(11)' # compatibility with MySQL default
when 5..8; 'bigint'
else raise(ActiveRecordError, "No integer type has byte size #{limit}")
end
end
そこには、limit => 8がmysql dbにビッグントを作成することは明らかです。
所属していません StackOverflow