text
Uzunluk sınırı olmayan bir dizi istiyorsanız Rails ile kullanmalısınız . Bunun gibi bir göç:
def up
change_column :your_table, :your_column, :text
end
def down
change_column :your_table, :your_column, :string
end
işleri halletmeli. Bunun sonunda da isteyebilir :null => false
veya başka seçenekler olabilir .
string
Açık bir sınırı olmayan bir sütun kullandığınızda , Rails bir örtük ekler :limit => 255
. Ancak kullanırsanız text
, veritabanının desteklediği keyfi uzunlukta dize türünü alırsınız. PostgreSQL, varchar
uzunluğu olmayan bir sütun kullanmanıza izin verir, ancak çoğu veritabanı bunun için ayrı bir tür kullanır ve Rails, varchar
uzunluk olmadan bunu bilmez . Sen kullanmak zorunda text
bir olsun Rails text
sütun PostgreSQL. Orada bir tür sütun arasında PostgreSQL hiçbir fark text
ve tip bir varchar
(fakat varchar(n)
bir farklı). Ayrıca, PostgreSQL'in üstüne konuşlandırıyorsanız, :string
(AKA varchar
) kullanmak için hiçbir neden yoktur , veritabanı davranır text
vevarchar(n)
için ekstra uzunluk kısıtlamaları dışında dahili olarak aynı varchar(n)
; Yalnızca kullanmalısınız varchar(n)
(AKA :string
harici kısıtlamayı varsa kolon boyutuna (örneğin 23 karakter uzunluğunda olacak şekilde 897 / B bu alanı 432 yazan bir hükümet biçimi olarak)).
Bir kenara, string
herhangi bir yerde bir sütun kullanıyorsanız , her zaman :limit
bir sınır olduğunu kendinize hatırlatmak için belirtmelisiniz ve sınırın aşılmamasını sağlamak için modelde bir doğrulama yaptırmalısınız. Sınırı aşarsanız, PostgreSQL şikayet eder ve bir istisna oluşturur, MySQL dizeyi sessizce keser veya şikayet eder (sunucu yapılandırmasına bağlı olarak), SQLite olduğu gibi geçmesine izin verir ve diğer veritabanları başka bir şey yapar (muhtemelen şikayet eder) .
Ayrıca, aynı veritabanının (Heroku'da genellikle PostgreSQL olacak) üzerine geliştiriyor, test ediyor ve dağıtıyor olmalısınız, hatta veritabanı sunucusunun aynı sürümlerini bile kullanmalısınız. Veritabanları arasında ActiveRecord'un sizi engellemeyeceği (GROUP BY davranışı gibi) başka farklılıklar da vardır. Bunu zaten yapıyor olabilirsin ama yine de bahsetmeyi düşündüm.
Güncelleme : ActiveRecord'un daha yeni sürümleri varchar
sınırsız olarak anlar , bu nedenle en azından PostgreSQL ile şunu söyleyebilirsiniz:
change_column :your_table, :your_column, :string, limit: nil
bir varchar(n)
sütunu olarak değiştirmek için varchar
. text
ve varchar
PostgreSQL söz konusu olduğunda hala aynı şeydir, ancak bazı form oluşturucular bunları farklı şekilde ele varchar
alır : bir <input type="text">
oysa text
bir çok satır alır <textarea>
.