0

開発中のRailsアプリにproduct_type、varchar(255)(SQLite Managerで)として定義されたフィールドがあり、最終的に外部キーになるDBがあります。他のファイルの既存のidフィールドを使用するために、名前product_type_idとタイプをRailsでの移行を使用するように変更しました。完了すると、FirefoxのSQLiteManagerはタイプを単なるではなくとして表示します。integerproduct_typeinteger(255)integer

とは何integer(255)ですか?ここでの別の質問への回答は、(255)が表示幅であると述べました。あれは正しいですか?現在、データベースにデータはありません。フィールドを削除して再作成し、を取得する必要がありますinteger。そうしないと、2つのフィールドのデータ型が一致しません。

4

1 に答える 1

3

これinteger(255)は、文字列フィールド[ varchar(255)]が整数に変換され、DBがフィールドサイズを維持したため、変更中に変換されたときに古いデータを保持する可能性があるために発生しました。どうやら、ほとんどのDBはそれほど大きな整数をサポートしていません。サイズ指定を無視するものもあれば、エラーになるものもあります。とにかく、結果は私が意図したものではありませんでした。

制限を削除する方法は、Railsで移行を実行し、制限をnilに設定することであることがわかりました。

class RemoveIntegerLimits < ActiveRecord::Migration
  def up
    change_column :inv_x_refs, :company_id, :integer, limit: nil
  end
end
于 2012-06-11T20:12:47.897 に答える