मैं a_horse_with_no_name द्वारा कही गई हर बात से सहमत हूं , और मैं आमतौर पर इरविन की टिप्पणी सलाह से सहमत हूं:
नहीं, चार अवर (और पुराना) है। पाठ और varchar प्रदर्शन (लगभग) वही।
मेटाडाटा
एक मामूली अपवाद के साथ, केवल समय मैं उपयोग char()
है जब मैं मेटा डेटा इस कहना चाहता हूँ MUST किया है एक्स-अक्षर। हालांकि मुझे पता है कि char()
केवल शिकायत है कि अगर इनपुट सीमा से अधिक है, तो मैं अक्सर एक CHECK
बाधा में कमियों से रक्षा करूंगा । उदाहरण के लिए,
CREATE TABLE foo (
x char(10) CHECK ( length(x) = 10 )
);
INSERT INTO foo VALUES (repeat('x', 9));
मैं कुछ कारणों से ऐसा करता हूं,
char(x)
कभी-कभी स्कीमा-लोडर के साथ निश्चित-चौड़ाई वाले कॉलम के रूप में अनुमान लगाया जाता है। यह निश्चित-चौड़ाई वाले तार के लिए अनुकूलित भाषा में अंतर कर सकता है।
- यह एक सम्मेलन स्थापित करता है जो समझ में आता है और इसे आसानी से लागू किया जाता है। मैं इस सम्मेलन से कोड उत्पन्न करने के लिए एक भाषा में एक स्कीमा-लोडर लिख सकता हूं।
मुझे ऐसा करने की एक मिसाल चाहिए,
- दो-अक्षर के राज्य संक्षिप्त रूप, हालांकि इस सूची की गणना की जा सकती है, मैं आमतौर पर इसे एक के साथ करूँगा
ENUM
।
- वाहन पहचान संख्या
- मॉडल संख्या (निश्चित आकार की)
त्रुटियों पर
ध्यान दें कि कुछ लोग सीमा के दोनों ओर त्रुटि संदेशों की असंगति से असहज हो सकते हैं, लेकिन यह मुझे परेशान नहीं करता है
test=# INSERT INTO foo VALUES (repeat('x', 9));
ERROR: new row for relation "foo" violates check constraint "foo_x_check"
DETAIL: Failing row contains (xxxxxxxxx ).
test=# INSERT INTO foo VALUES (repeat('x', 11));
ERROR: value too long for type character(10)
साथ इसके विपरीत varchar
इसके अलावा, मुझे लगता है कि उपरोक्त सुझाव लगभग हमेशा उपयोग केtext
सम्मेलन के साथ वास्तव में अच्छी तरह से फिट बैठता है । तुम varchar(n)
भी पूछते हो। मैं उस का उपयोग कभी नहीं । कम से कम, मुझे पिछली बार याद नहीं था कि मैं इस्तेमाल किया था varchar(n)
।
- यदि किसी युक्ति में स्थिर-चौड़ाई वाला फ़ील्ड है जिस पर मुझे भरोसा है, तो मैं उपयोग करता हूं
char(n)
,
- अन्यथा, मैं
text
प्रभावी रूप से varchar
(कोई सीमा नहीं) का उपयोग करता हूं
अगर मुझे एक युक्ति मिली जिसमें परिवर्तनशील-लंबाई वाली पाठ-कुंजियाँ थीं जो कि सार्थक थीं और मुझे भरोसा था कि मेरे पास अधिकतम-लंबाई है, तो मैं भी उपयोग करूँगा varchar(n)
। हालाँकि, मैं उस मापदंड के अनुरूप कुछ भी नहीं सोच सकता।
अतिरिक्त नोट्स
संबंधित प्रश्नोत्तर: