質問

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にビッグントを作成することは明らかです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top