VARCHAR और CHAR में क्या अंतर है?


366

MySQL में VARCHAR और CHAR में क्या अंतर है?

मैं एमडी 5 हैश स्टोर करने की कोशिश कर रहा हूं।


15
MD5 हैश में हमेशा 32 अक्षर होते हैं। इसलिए अपने प्रदर्शन का अधिकतम उपयोग करने के लिए CHAR (32) का उपयोग करें क्योंकि CHAR निर्धारित लंबाई है (CHAR और VARCHAR के बीच अंतर के बारे में अधिक जानकारी के लिए नीचे उत्तर देखें)।
अगस्‍त

जवाबों:


361

VARCHAR चर-लंबाई है।

CHAR निश्चित लंबाई है।

यदि आपकी सामग्री एक निश्चित आकार है, तो आपको बेहतर प्रदर्शन मिलेगा CHAR

विस्तृत विवरण के लिए CHAR और VARCHAR प्रकार पर MySQL पृष्ठ देखें (टिप्पणियों को भी पढ़ना सुनिश्चित करें)।


51
@ जल्द: जब Anon। कहते हैं, "आपकी सामग्री एक निश्चित आकार है" इसका मतलब है कि आपकी तालिका की पंक्तियों में सभी निश्चित आकार के फ़ील्ड होने चाहिए। यदि आप एक फ़ील्ड में VARCHAR के विरुद्ध CHAR का उपयोग करते हैं, तो आपको कोई प्रदर्शन सुधार नहीं मिलता है, लेकिन तालिका में अन्य फ़ील्ड होते हैं जो VARCHAR हैं।
मार्को डेमायो

2
कोई चार डेटाटाइप प्रदर्शन नहीं जोड़ता है ... क्वेरी sql निष्पादित करते समय एक निष्पादन योजना उत्पन्न करेगा। मान लें कि 2 कॉलम चारकोल चार (2000) और वर्चोरॉल वर्चर (2000) हैं। निष्पादन योजना में, वर्कर प्रकार के स्तंभों के लिए अनुमानित पंक्ति आकार अनुमानित किया जा सकता है। इस प्रकार यह अस्थायी डीबी पर फैल जाता है। तो चार का उपयोग प्रदर्शन के लिए अच्छा है
विग्नेश

1
VARCHAR (n) के समांतरता में मूल्य का अर्थ क्या है?
शिवगामी नंबि

@Marco Demaio क्या आप इसके पीछे का कारण जानते हैं?
देहान दे क्रोस

1
@ jdc91: प्रदर्शन को बढ़ाने के लिए पूरी पंक्ति को निश्चित-चौड़ाई में बदलना पड़ता है। MySQL को उस तरह की तालिका में स्थान की आवश्यकताओं और पंक्तियों की भरपाई करने से लाभ होता है।
मार्को डेमायो

225

CHAR

  1. निर्धारित लंबाई के चरित्र स्ट्रिंग मूल्य को संग्रहीत करने के लिए उपयोग किया जाता है ।
  2. अधिकतम नं। डेटा प्रकार के वर्ण 255 वर्णों के हो सकते हैं ।
  3. यह VARCHAR की तुलना में 50% तेज है।
  4. स्थिर मेमोरी आवंटन का उपयोग करता है ।

VARCHAR

  1. चर लंबाई अल्फ़ान्यूमेरिक डेटा संग्रहीत करने के लिए उपयोग किया जाता है ।
  2. अधिकतम इस डेटा प्रकार को पकड़ कर रखा जा सकता है
    • Pre-MySQL 5.0.3: 255 वर्ण
    • पोस्ट- MySQL 5.0.3: पंक्ति के लिए 65,535 वर्ण साझा किए गए।
  3. यह CHAR की तुलना में धीमा है।
  4. गतिशील मेमोरी आवंटन का उपयोग करता है ।

3
मुझे थोड़ा आश्चर्य है कि इस उत्तर को इतनी बार उखाड़ा गया है। MySQL प्रलेखन में कहा गया हैValues in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
DroidOS

2
उल्लेख नहीं है कि आप
वर्णानुक्रमिक

44
यह 50% तेजी से किस पर आधारित है? 50% तेजी से क्या करना है? किन स्थितियों में? और आप इस संदर्भ में स्थिर स्मृति आवंटन बनाम गतिशील से क्या मतलब है?
मार्टिन स्मिथ

4
@MartinSmith मैं वही पूछने वाला था .. मत सोचो कि जानकारी सटीक है। asktom.oracle.com/pls/asktom/…
Ozgur Bar

2
-1; प्रदर्शन के दावे यहाँ अस्पष्ट और निराधार हैं, स्मृति आवंटन रणनीति में अंतर (और यह क्यों मायने रखता है) बाहर नहीं लगाया गया है, और दावा है कि "अल्फ़ान्यूमेरिक डेटा" varchar थोड़ा अजीब है; varchar कॉलम निश्चित रूप से गैर-अल्फ़ान्यूमेरिक वर्ण भी संग्रहीत कर सकते हैं!
मार्क एमी

122

चार बनाम वाराह

CHAR का उपयोग निश्चित लंबाई के आकार के
लिए किया जाता है चर चर का उपयोग चर लंबाई के आकार के लिए किया जाता है।

उदाहरण के लिए

Create table temp
(City CHAR(10),
Street VARCHAR(10));

Insert into temp
values('Pune','Oxford');

select length(city), length(street) from temp;

आउटपुट होगा

length(City)          Length(street)
10                    6

निष्कर्ष: भंडारण स्थान का उपयोग करने के लिए कुशलता से चर का उपयोग करना चाहिए बजाय अगर चर लंबाई चर है


4
शहर = चार (१०), स्ट्रीट = वरचर (१०), शहर = पुणे, सड़क = ऑक्सफोर्ड, लंबाई (शहर) = ४, लंबाई (सड़क) = ६
अबुलवाड

2
यह क्वेरी (चुनिंदा लंबाई (शहर), लंबाई (सड़क) अस्थायी से) mysql 5.7 mysql में निम्न आउटपुट दे रही है> चुनिंदा लंबाई (शहर), लंबाई (सड़क) अस्थायी से; + -------------- + ---------------- + | लंबाई (शहर) | लंबाई (सड़क) | + -------------- + ---------------- + | 4 | 6 | + -------------- + ---------------- + सेट में १ पंक्ति (०.०० सेकंड)
जसबीर रावल

68

एक CHAR(x)स्तंभ केवल हो सकता है वास्तव में x अक्षर।
एक VARCHAR(x)कॉलम वर्णों तक हो सकता है x

चूंकि आपका एमडी 5 हैश हमेशा एक ही आकार का होगा, इसलिए आपको संभवतः इसका उपयोग करना चाहिए CHAR

हालाँकि, आपको पहले स्थान पर MD5 का उपयोग नहीं करना चाहिए; यह कमजोरियों को जानता है।
इसके बजाय SHA2 का उपयोग करें।
यदि आपके पास पासवर्ड हैं, तो आपको bcrypt का उपयोग करना चाहिए।


44
"एक CHAR (x) कॉलम में केवल x अक्षर हो सकते हैं।" वास्तव में, आप x वर्णों से कम के साथ डेटा जोड़ सकते हैं, लेकिन मुझे लगता है कि इसका मतलब है कि यह हमेशा दृश्यों के पीछे स्मृति के 10 वर्णों को प्राप्त करता है।
डैन डब्लू

13
आप नहीं जानते कि वे md5 हैश का भंडारण क्यों कर रहे हैं, md5 का उपयोग करने के कई, कई वैध कारण हैं जो सुरक्षा से कोई लेना-देना नहीं है। टकराव सामान्य नहीं हैं और एल्गोरिथ्म अधिक सुरक्षित लोगों की तुलना में तेज है।
जॉन हंट

1
मान लें कि CHAR (x) कॉलम x वर्णों को लागू नहीं करता है तो क्या निश्चित आकार के डेटा के लिए VARCHAR (x) पर इसका उपयोग करने का कोई कारण है?
NeverEndingQueue

11

MySQL में VARCHAR और CHAR में क्या अंतर है?

पहले से दिए गए उत्तर के लिए मैं ओएलटीपी सिस्टम में या बार-बार अपडेट वाले सिस्टम में जोड़ना चाहूंगा कि अपडेट के दौरान CHARसंभावित VARCHARकॉलम के विखंडन के कारण चर आकार के कॉलम के लिए भी उपयोग करने पर विचार करें।

मैं एमडी 5 हैश स्टोर करने की कोशिश कर रहा हूं।

एमडी 5 हैश सबसे अच्छा विकल्प नहीं है अगर सुरक्षा वास्तव में मायने रखती है। हालांकि, यदि आप किसी भी हैश फ़ंक्शन का उपयोग करेंगे, तो BINARYइसके लिए प्रकार पर विचार करें (जैसे MD5 16-बाइट हैश का उत्पादन करेगा, इसलिए हेक्स अंकों का प्रतिनिधित्व करने वाले 32 वर्णों BINARY(16)के CHAR(32)लिए पर्याप्त होगा। यह अधिक स्थान बचाएगा और प्रदर्शन प्रभावी होगा।


विचार की इस ट्रेन के बाद, मैं व्यापार आईडी के लिए CHAR का उपयोग करूंगा जो पठनीयता बनाम दक्षता के लिए है। मैं अब भी bigint प्राथमिक कुंजी का उपयोग करेगा।
आर्किमिडीज ट्रेजानो

9

यदि वर्ण वर्ण घोषित लंबाई से कम है, तो वर्चर्स रिक्त स्थान को काट देता है, जबकि चार नहीं होगा। चार पैड स्पेस देगा और हमेशा घोषित लंबाई की लंबाई होगी। दक्षता के संदर्भ में, varchar अधिक निपुण है क्योंकि यह वर्णों को अधिक समायोजन की अनुमति देता है। हालांकि, यदि आप चार की सही लंबाई जानते हैं, तो चार कुछ अधिक गति के साथ निष्पादित करेगा।


7

आज अधिकांश RDBMS में, वे समानार्थक शब्द हैं। हालाँकि उन प्रणालियों के लिए जिनमें अभी भी एक अंतर है, एक CHAR फ़ील्ड को निश्चित-चौड़ाई वाले स्तंभ के रूप में संग्रहीत किया जाता है। यदि आप इसे CHAR (10) के रूप में परिभाषित करते हैं, तो 10 वर्ण तालिका में लिखे जाते हैं, जहां "पेडिंग" (आमतौर पर रिक्त स्थान) का उपयोग किसी भी स्थान को भरने के लिए किया जाता है जो डेटा का उपयोग नहीं करता है। उदाहरण के लिए, "बॉब" को सहेजना ("बॉब" +7 रिक्त स्थान) के रूप में सहेजा जाएगा। एक VARCHAR (चर वर्ण) स्तंभ अतिरिक्त स्थान को बर्बाद किए बिना डेटा को संग्रहीत करने के लिए है जो एक CHAR स्तंभ करता है।

हमेशा की तरह, विकिपीडिया जोर से बोलता है।


5

CHAR एक निश्चित लंबाई क्षेत्र है; VARCHAR एक चर लंबाई क्षेत्र है। यदि आप नामों के रूप में बेतहाशा परिवर्तनशील लंबाई के साथ तार लगा रहे हैं, तो एक VARCHAR का उपयोग करें, यदि लंबाई हमेशा समान होती है, तो CHAR का उपयोग करें क्योंकि यह थोड़ा अधिक आकार-कुशल है, और थोड़ा तेज भी है।


हालांकि मुझे लगता है कि यहाँ गति और भंडारण दक्षता के बारे में दावे सही हैं, दोनों में से किसी भी तरह से पुष्टि नहीं की गई है (और यह पूरी तरह से प्रशंसनीय है कि वे झूठे हैं), जो इस जवाब को गैर-उपयोगी बनाता है; यह सिर्फ वही दोहराता है जो पाठक शायद पहले से ही सच होने की उम्मीद कर रहा है, बिना कुछ किए वास्तव में इसकी पुष्टि करने में मदद करता है।
मार्क अमेरी

1

CHAR निश्चित लंबाई है और VARCHAR परिवर्तनशील लंबाई है। CHAR हमेशा प्रति एंट्री स्पेस की समान मात्रा का उपयोग करता है, जबकि VARCHAR केवल वास्तविक टेक्स्ट को स्टोर करने के लिए आवश्यक राशि का उपयोग करता है।


1

चर एक निश्चित-लंबाई वाला वर्ण डेटा प्रकार है, चरचर एक चर-लंबाई वर्ण डेटा प्रकार है।

चूँकि char एक निश्चित लंबाई का डेटा प्रकार है, char मान का संग्रहण आकार इस कॉलम के अधिकतम आकार के बराबर होता है। चूंकि varchar एक चर-लंबाई डेटा प्रकार है, इसलिए varchar value का संग्रहण आकार दर्ज किए गए डेटा की वास्तविक लंबाई है, न कि इस कॉलम के लिए अधिकतम आकार।

जब आप कॉलम में डेटा प्रविष्टियाँ समान आकार के होने की उम्मीद करते हैं तो आप चार का उपयोग कर सकते हैं। जब आप किसी स्तंभ में डेटा प्रविष्टियों के आकार में काफी भिन्नता की अपेक्षा करते हैं, तो आप varchar का उपयोग कर सकते हैं।


0

उच्च प्रदर्शन MySQL पुस्तक के अनुसार :

VARCHAR वैरिएबल-लेंथ कैरेक्टर स्ट्रिंग्स को स्टोर करता है और यह सबसे आम स्ट्रिंग डेटा टाइप है। इसे निश्चित-लंबाई प्रकारों की तुलना में कम संग्रहण स्थान की आवश्यकता हो सकती है, क्योंकि यह केवल उतनी ही जगह का उपयोग करता है जितनी इसे जरूरत होती है (यानी, कम स्थान का उपयोग छोटे मूल्यों को संग्रहीत करने के लिए किया जाता है)। अपवाद ROW_FORMAT = FIXED के साथ बनाई गई एक MyISAM तालिका है, जो प्रत्येक पंक्ति के लिए डिस्क पर एक निश्चित स्थान का उपयोग करती है और इस प्रकार अंतरिक्ष को बर्बाद कर सकती है। VARCHAR प्रदर्शन में मदद करता है क्योंकि यह अंतरिक्ष बचाता है।

CHAR निश्चित है-लंबाई: MySQL हमेशा निर्दिष्ट वर्णों के लिए पर्याप्त स्थान आवंटित करता है। CHAR मान संग्रहीत करते समय, MySQL किसी भी अनुगामी रिक्त स्थान को निकालता है। (यह MySQL 4.1 में VARCHAR का भी सच था और पुराने संस्करण- CHAR और VAR CHAR तार्किक रूप से समान थे और केवल संग्रहण प्रारूप में भिन्न थे।) मान तुलना के लिए आवश्यकतानुसार रिक्त स्थान के साथ गद्देदार होते हैं।


2
" VARCHAR प्रदर्शन में मदद करता है क्योंकि यह अंतरिक्ष बचाता है " यह अंतरिक्ष बचाता है, हाँ, लेकिन क्या यह प्रदर्शन को नकारात्मक रूप से प्रभावित नहीं करता है? VARCHARजरूरत पड़ने पर विरोध के रूप में प्रदर्शन को कम करने के लिए आवश्यक रूप से स्मृति को गतिशील रूप से आवंटित करने की आवश्यकता है CHAR?
स्पिकट्रिक्स

@Spikatrix निर्भर करता है। अगर VARCHAR मान अक्सर छोटे होते हैं, लेकिन N बाइट्स तक हो सकते हैं, तो डायनेमिक एलोकेशन से महत्वपूर्ण मात्रा में जगह बचाई जा सकती है और I / O, जो बहुत सारे डेटा के लिए अधिक परफॉर्मेंट है। CHAR मान जो लंबाई में लगभग बराबर होते हैं, वे अधिक निष्पादक होंगे। रीड्स बनाम राइट्स से भी शायद फर्क पड़ता है।
एंड्रयू

-4

Char एक निश्चित लंबाई है (2000 वर्णों का समर्थन करता है), यह चरित्र के लिए खड़ा है एक डेटा प्रकार है

Varchar एक चर लंबाई है (4000 वर्णों का समर्थन करता है)


-1; ये नंबर MySQL के लिए सही नहीं हैं। (मुझे लगता है कि वे ओरेकल के लिए हो सकते हैं?)
मार्क ऐमी

-5

चार या वर्चर- इसका उपयोग टेक्‍सिक डेटा दर्ज करने के लिए किया जाता है जहां लंबाई को कोष्ठक में दर्शाया जा सकता है जैसे- नाम चार (20)


यह मूल प्रश्न को संबोधित नहीं करता है। ओपी प्रकारों के बीच व्यावहारिक अंतर पूछ रहा है, न कि प्रकारों के वाक्यविन्यास और उद्देश्य। इसके अलावा (और) कोष्ठकों कर रहे हैं, नहीं कोष्ठक।
2mac

@ 2mac आपका अंतिम वाक्य केवल अमेरिकी अंग्रेजी का सच है; ब्रिटेन में हम कॉल करते हैं (और )कोष्ठक, और कई ब्रिट्स को शायद यह भी महसूस नहीं होता है कि अंग्रेजी की बोलियाँ हैं जिनमें "कोष्ठक" शब्द एक विराम चिह्न को संदर्भित कर सकता है। "कोष्ठक" को "कोष्ठक" को प्राथमिकता देने के लिए एक मजबूत मामला है - यह संभवतया, संतुलन पर है, प्रोग्रामर के अंतरराष्ट्रीय दर्शकों को लक्षित करते समय अधिकतम स्पष्ट विकल्प - लेकिन यह सिर्फ "कोष्ठक" की तुलना में अधिक जटिल मामला है।
मार्क एमी

-11

CHAR:

  • चरित्र और संख्या दोनों का समर्थन करता है।
  • 2000 वर्णों का समर्थन करता है।
  • तय लंबाई।

वाराहर:

  • चरित्र और संख्या दोनों का समर्थन करता है।
  • 4000 वर्णों का समर्थन करता है।
  • परिवर्तनीय लंबाई।

कोई टिप्पणी......!!!!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.