आपको text
का उपयोग करना चाहिए रेल के साथ यदि आप बिना लंबाई सीमा वाली स्ट्रिंग चाहते हैं। इस तरह एक माइग्रेशन:
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
. का उपयोग करते हैं एक स्पष्ट सीमा के बिना कॉलम, रेल एक अंतर्निहित :limit => 255
add जोड़ देगा . लेकिन अगर आप text
. का उपयोग करते हैं , आपको डेटाबेस द्वारा समर्थित किसी भी प्रकार की मनमानी लंबाई वाली स्ट्रिंग मिल जाएगी। PostgreSQL आपको varchar
. का उपयोग करने की अनुमति देता है बिना लंबाई के कॉलम लेकिन अधिकांश डेटाबेस उसके लिए एक अलग प्रकार का उपयोग करते हैं और रेल को varchar
के बारे में पता नहीं है बिना लंबाई के। आपको text
. का उपयोग करना होगा रेल में text
प्राप्त करने के लिए PostgreSQL में कॉलम। PostgreSQL में text
. प्रकार के कॉलम के बीच कोई अंतर नहीं है और एक प्रकार का varchar
(लेकिन varchar(n)
है को अलग)। इसके अलावा, यदि आप PostgreSQL के शीर्ष पर तैनाती कर रहे हैं, तो :string
का उपयोग करने का कोई कारण नहीं है। (उर्फ varchar
) बिल्कुल भी, डेटाबेस text
. को ट्रीट करता है और varchar(n)
varchar(n)
. के लिए अतिरिक्त लंबाई बाधाओं को छोड़कर आंतरिक रूप से समान; आपको केवल varchar(n)
. का उपयोग करना चाहिए (उर्फ :string
) यदि आपके पास स्तंभ आकार पर कोई बाहरी बाधा है (जैसे कि एक सरकारी प्रपत्र जो कहता है कि प्रपत्र 897/B पर फ़ील्ड 432 23 वर्ण लंबा होगा)।
इसके अलावा, यदि आप string
. का उपयोग कर रहे हैं कॉलम कहीं भी, आपको हमेशा :limit
. निर्दिष्ट करना चाहिए अपने आप को एक अनुस्मारक के रूप में कि एक सीमा है और आपको यह सुनिश्चित करने के लिए मॉडल में एक सत्यापन होना चाहिए कि सीमा पार नहीं हुई है। यदि आप सीमा से अधिक हो जाते हैं, तो PostgreSQL शिकायत करेगा और अपवाद उठाएगा, MySQL चुपचाप स्ट्रिंग को छोटा कर देगा या शिकायत करेगा (सर्वर कॉन्फ़िगरेशन के आधार पर), SQLite इसे पास करने देगा, और अन्य डेटाबेस कुछ और करेंगे (शायद शिकायत करें) ।
साथ ही, आपको उसी डेटाबेस के शीर्ष पर विकास, परीक्षण और तैनाती भी करनी चाहिए (जो आमतौर पर हेरोकू में पोस्टग्रेएसक्यूएल होगा), आपको डेटाबेस सर्वर के समान संस्करणों का भी उपयोग करना चाहिए। डेटाबेस (जैसे GROUP BY का व्यवहार) के बीच अन्य अंतर हैं जिनसे ActiveRecord आपको इंसुलेट नहीं करेगा। हो सकता है कि आप पहले से ही ऐसा कर रहे हों, लेकिन मैंने सोचा कि मैं इसका उल्लेख वैसे भी करूंगा।
अपडेट करें :ActiveRecord के नए संस्करण varchar
. को समझते हैं एक सीमा के बिना, कम से कम PostgreSQL के साथ, आप कह सकते हैं:
change_column :your_table, :your_column, :string, limit: nil
एक varchar(n)
. को बदलने के लिए कॉलम से varchar
. text
और varchar
जहां तक पोस्टग्रेएसक्यूएल का संबंध है, वे अभी भी वही हैं, लेकिन कुछ फॉर्म निर्माता उनके साथ अलग व्यवहार करेंगे:varchar
एक <input type="text">
प्राप्त करता है जबकि text
एक बहु-पंक्ति प्राप्त करता है <textarea>
।