Sie sollten text
mit Rails verwenden, wenn Sie eine Zeichenfolge ohne Längenbeschränkung möchten. Eine Migration wie diese:
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
sollte die Dinge regeln. Vielleicht möchten Sie auch :null => false
einige andere Optionen am Ende.
Wenn Sie eine string
Spalte ohne explizite Begrenzung verwenden, fügt Rails eine implizite Spalte hinzu :limit => 255
. Wenn Sie jedoch verwenden text
, erhalten Sie den von der Datenbank unterstützten Zeichenfolgentyp beliebiger Länge. Mit PostgreSQL können Sie eine varchar
Spalte ohne Länge verwenden, aber die meisten Datenbanken verwenden dafür einen separaten Typ, und Rails weiß nichts varchar
ohne Länge. Sie müssen text
in Rails verwenden, um eine text
Spalte in PostgreSQL zu erhalten. Es gibt keinen Unterschied in PostgreSQL zwischen einer Spalte vom Typ text
und einem vom Typ varchar
(aber varchar(n)
ist anders). Wenn Sie zusätzlich zu PostgreSQL bereitstellen, gibt es keinen Grund für die Verwendung :string
(AKA varchar
). Die Datenbank behandelt text
undvarchar(n)
das gleiche intern mit Ausnahme der zusätzlichen Längenbeschränkungen für varchar(n)
; Sie sollten varchar(n)
(AKA :string
) nur verwenden, wenn Sie eine externe Einschränkung (z. B. ein Regierungsformular, das besagt, dass das Feld 432 in Formular 897 / B 23 Zeichen lang ist) für die Spaltengröße haben.
Wenn Sie eine string
Spalte irgendwo verwenden, sollten Sie dies immer :limit
als Erinnerung an sich selbst angeben , dass es ein Limit gibt, und Sie sollten eine Validierung im Modell haben, um sicherzustellen, dass das Limit nicht überschritten wird. Wenn Sie das Limit überschreiten, beschwert sich PostgreSQL und löst eine Ausnahme aus, MySQL schneidet die Zeichenfolge leise ab oder beschwert sich (abhängig von der Serverkonfiguration), SQLite lässt sie unverändert passieren und andere Datenbanken tun etwas anderes (wahrscheinlich beschweren) .
Außerdem sollten Sie auf derselben Datenbank (normalerweise PostgreSQL bei Heroku) entwickeln, testen und bereitstellen. Sie sollten sogar dieselben Versionen des Datenbankservers verwenden. Es gibt andere Unterschiede zwischen Datenbanken (z. B. das Verhalten von GROUP BY), von denen ActiveRecord Sie nicht isoliert. Sie machen das vielleicht schon, aber ich dachte, ich würde es trotzdem erwähnen.