Ex: countrycode char (3 ) CHARSET utf8
हम 3 अक्षरों के साथ एक स्तंभ के लिए बिल्कुल पूछ रहे हैं। इस कॉलम के लिए आवश्यक भंडार ऐसा होगा कि किसी भी 3-अक्षर के नाम को फिट होना चाहिए। इसका अर्थ है (3 अक्षर) बार (3 बाइट प्रति चरित्र) = 9 बाइट्स स्टोरेज का। तो CHAR और utf8 एक साथ आदर्श से कम हो सकते हैं। VARCHAR बेहतर व्यवहार करता है: इसके अनुसार केवल ऊपर वर्णित वर्णों के अनुसार कई बाइट्स की आवश्यकता होती है। इसलिए पाठ "एबीसी" को केवल 3 बाइट्स की आवश्यकता होगी
क्या मुझे पाठ 'एबीसी' (यूटीएफ 8 और चार (3) के साथ) 3 बाइट या 9 बाइट्स की आवश्यकता है ?! धन्यवाद
MySQL की आंतरिक संरचना तालिका संरचना के भीतर सीधे CHAR फ़ील्ड प्रदान करती है, उदा। एक सरल सारणी की तरह:
तालिका foo बनाएं (id int name char (3));
एक ऑन-डिस्क रिकॉर्ड का उत्पादन करेगा जो दिखता है
xxxxccccccccc ^^^^ - इंट स्टोरेज स्पेस के 4 बाइट ^^^^^^ ^^^ 9 बिट के utf-8 वर्ण अंतरिक्ष से
चूंकि MySQL के पास अग्रिम रूप से जानने का कोई तरीका नहीं है क्योंकि आप उस चार क्षेत्रों में किस तरह का टेक्स्ट संग्रहीत करेंगे, यह है सबसे खराब स्थिति को मानने के लिए, और जितना ज्यादा जगह के रूप में आवंटित करता है, उतना ही 'सबसे लंबे संभव संभव' यूटीएफ -8 पाठ के 3 वर्ण हो सकते हैं। यदि ऐसा नहीं होता है, तो एक अत्यधिक लंबी स्ट्रिंग ऑन-डिस्क मेमोरी को ओवरफ्लो करेगी और आसन्न रिकॉर्ड पर पटकथा शुरू कर देगी।
दूसरी तरफ, केवल एक छोटा 'स्टब' डेटा अनुभाग में तालिका का कच्चा डेटा, और varchar की सामग्री अन्यत्र संग्रहीत की जाती है। इसका मतलब यह है कि आपके varchar (3) हमेशा एक ही मात्रा में टेबल-स्पेस भंडारण पर कब्जा कर लेते हैं, चाहे आप किस प्रकार का चरित्र उपयोग कर रहे हों।
No comments:
Post a Comment