text
を使用する必要があります 長さ制限のない文字列が必要な場合は、Railsを使用します。このような移行:
def up
change_column :your_table, :your_column, :text
end
def down
# This might cause trouble if you have strings longer
# than 255 characters.
change_column :your_table, :your_column, :string
end
物事を整理する必要があります。 :null => false
が必要な場合があります またはその最後にある他のオプションもあります。
string
を使用する場合 明示的な制限のない列の場合、Railsは暗黙的な:limit => 255
を追加します 。ただし、 text
を使用する場合 、データベースがサポートする任意の長さの文字列タイプを取得します。 PostgreSQLでは、 varchar
を使用できます 長さのない列ですが、ほとんどのデータベースはそのために別のタイプを使用し、Railsは varchar
について認識していません 長さなし。 text
を使用する必要があります Railsでtext
を取得します PostgreSQLの列。タイプtext
の列間でPostgreSQLに違いはありません タイプvarchar
の1つ (ただし、 varchar(n)
は 違う)。さらに、PostgreSQLの上にデプロイする場合は、:string
を使用する理由はありません。 (別名 varchar
)まったく、データベースは text
を扱います およびvarchar(n)
varchar(n)
の余分な長さの制約を除いて、内部的に同じです。; varchar(n)
のみを使用する必要があります (別名:string
)列サイズに外部制約(フォーム897 / Bのフィールド432は23文字の長さになるという政府のフォームなど)がある場合。
余談ですが、 string
を使用している場合 列はどこでも、常に:limit
を指定する必要があります 制限があることを思い出してください。制限を超えないように、モデルで検証を行う必要があります。制限を超えると、PostgreSQLは文句を言って例外を発生させ、MySQLは文字列を静かに切り捨てるか文句を言います(サーバー構成によって異なります)、SQLiteはそのまま通過させ、他のデータベースは他のことを行います(おそらく文句を言います) 。
また、同じデータベース(通常、HerokuではPostgreSQL)上で開発、テスト、およびデプロイする必要があります。同じバージョンのデータベースサーバーを使用する必要もあります。データベース間には、ActiveRecordがユーザーを隔離しない他の違い(GROUP BYの動作など)があります。あなたはすでにこれをしているかもしれませんが、とにかくそれについて言及したいと思いました。
更新 :ActiveRecordの新しいバージョンは varchar
を理解します 制限がないので、少なくともPostgreSQLでは、次のように言うことができます。
change_column :your_table, :your_column, :string, limit: nil
varchar(n)
を変更するには varchar
への列 。 テキストコード> および
varchar
PostgreSQLに関する限り、これは同じことですが、一部のフォームビルダーはそれらを異なる方法で処理します: varchar
を取得します 一方、 text
複数行のを取得します 。