2009-11-24 8 views
18

यदि मेरे पास एक फ़ील्ड है जिसमें वर्चर (100) स्वीकार करने के रूप में घोषित किया गया है और फिर मैं वास्तव में "हैलो" शब्द डालता हूं तो mysql सर्वर पर कितना वास्तविक संग्रहण उपयोग किया जाएगा? वर्चर (100) घोषित किए जाने के बावजूद कोई भंडारण नहीं होने पर नल परिणाम का एक सम्मिलन भी होगा?mysql में वर्चर (100) घोषणा के साथ कितना वास्तविक भंडारण उपयोग किया जाता है?

क्या जवाब है, क्या यह विभिन्न डेटाबेस कार्यान्वयन के अनुरूप है?

उत्तर

15

अगर मैं जो varchar (100) को स्वीकार करने के रूप में घोषित किया जाता है एक क्षेत्र के साथ एक मेज और फिर मैं वास्तव में शब्द "हैलो" कितना वास्तविक भंडारण mysql सर्वर पर इस्तेमाल किया जाएगा डालने?

माइस्क्ल लंबाई के लिए 5 बाइट प्लस वन बाइट स्टोर करेगा। यदि वर्कर 255 से अधिक है, तो यह लंबाई के लिए 2 बाइट स्टोर करेगा।

ध्यान दें कि यह कॉलम के वर्णमाला पर निर्भर है। यदि वर्णसेट utf8 है, तो MySQL को प्रति वर्ण 3 बाइट्स की आवश्यकता होगी। कुछ स्टोरेज इंजन (यानी मेमोरी) को चरित्र सेट के लिए प्रति वर्ण अधिकतम बाइट लंबाई की आवश्यकता होगी।

इसके अलावा में शून्य परिणाम के निवेश में कोई भंडारण भी varchar (100) घोषित किया जाता है, हालांकि इस्तेमाल किया जा रहा होगा?

कॉलम को शून्य बनाने का अर्थ है कि mysql को प्रति पंक्ति 8 शून्य कॉलम प्रति अतिरिक्त बाइट को अलग करना होगा। इसे "नल मास्क" कहा जाता है।

क्या जवाब है, क्या यह विभिन्न डेटाबेस कार्यान्वयन के अनुरूप है?

यह mysql भीतर भंडारण इंजनों के बीच भी संगत नहीं है!

+0

कृपया ध्यान दें कि संख्या MyISAM तालिकाओं के लिए हैं। InnoDB या अन्य इंजनों में अन्य आवश्यकताएं हो सकती हैं। यह भी देखें: http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html – johannes

+0

इसलिए कोई फर्क नहीं पड़ता कि हम वाराटर डेटाटाइप पर कितनी सीमा निर्धारित कर चुके हैं। सही? –

13

यह वास्तव में आपकी तालिका के वर्णमाला पर निर्भर करता है।

CHAR के विपरीत, VARCHAR महत्व देता एक एक बाइट या दो-बाइट लंबाई उपसर्ग के साथ साथ डेटा के रूप में जमा हो जाती है। लंबाई उपसर्ग मान में बाइट्स की संख्या इंगित करता है। एक कॉलम बाइट का उपयोग करता है यदि मानों को 255 बाइट्स से अधिक की आवश्यकता नहीं है, तो दो लंबाई बाइट्स यदि मान को 255 बाइट से अधिक की आवश्यकता हो सकती है।

- source

UTF-8 अक्सर एक एन्कोडिंग एक या कुछ भाषाओं के लिए बनाया तुलना में अधिक स्थान लेता है। विशेषक और अन्य वर्णमाला स्क्रिप्ट से पात्रों के साथ लैटिन पत्र आम तौर पर उचित मल्टी-बाइट एन्कोडिंग में चरित्र प्रति एक बाइट ले लेकिन UTF-8 में दो ले लो। पूर्व एशियाई स्क्रिप्ट आमतौर पर में बहु-बाइट एन्कोडिंग में प्रति वर्ण दो बाइट्स हैं, फिर भी यूटीएफ -8 में प्रति चरित्र तीन बाइट्स लेते हैं।

- source

+0

बहुत बहुत धन्यवाद, बस मैं क्या जानना चाहता था। – Benj

+0

यह नल से संबंधित प्रश्न का उत्तर नहीं देता है। –

+0

हां, लेकिन स्रोत लिंक विशेष रूप से VARCHAR फ़ील्ड की बाइट आवश्यकताओं को बताता है और खाली स्ट्रिंग का उपयोग करके एक उदाहरण देता है। मैंने सोचा कि यह उसके लिए पढ़ने लायक था। –

2

varchar केवल संग्रहीत करता है क्या चार दुकानों जबकि प्रयोग किया जाता है बाइट्स की एक निर्धारित संख्या।

0

यूटीएफ 16 कभी-कभी कम डेटा लेता है तो utf8, कुछ दुर्लभ भाषाओं के लिए, मुझे नहीं पता कि कौन से हैं।

दोस्तों, वहाँ MySql में संकुचित तालिकाओं का उपयोग करने के लिए एक विकल्प है? अपाचे में पसंद है। बहुत बहुत धन्यवाद

संबंधित मुद्दे