यदि यह एक सी-प्रोग्राम होगा तो मैं इसके बारे में सोचने के लिए कुछ समय व्यतीत करूंगा। लेकिन डेटाबेस के साथ मैं इसे डीबी इंजन में छोड़ दूंगा।
डीबी प्रोग्रामर ने सर्वश्रेष्ठ मेमोरी लेआउट के बारे में सोचने में काफी समय बिताया है, इसलिए बस डेटाबेस को बताएं कि आपको क्या चाहिए और यह डेटा को इस तरह से स्टोर करेगा जो डीबी इंजन को सर्वोत्तम (आमतौर पर) उपयुक्त बनाता है। कैसे स्ट्रिंग संग्रहीत किया जाता है:
हैं आप अपने डेटा संरेखित करने के लिए चाहते हैं, आप आंतरिक डेटा संगठन के सटीक ज्ञान की आवश्यकता होगी? लम्बाई स्टोर करने के लिए एक, दो या 4 बाइट? क्या यह सादा बाइट अनुक्रम के रूप में संग्रहीत है या यूटीएफ -8 यूटीएफ -16 यूटीएफ -32 में एन्कोड किया गया है? क्या डीबी को नल या> MAXINT मानों की पहचान करने के लिए अतिरिक्त बाइट की आवश्यकता है? हो सकता है कि स्ट्रिंग को एक एनयूएल-समाप्त बाइट अनुक्रम के रूप में संग्रहीत किया जाता है - फिर एक बाइट को आंतरिक रूप से आवश्यक है।
साथ ही वर्चर के साथ यह भी सत्य नहीं है, कि डीबी हमेशा आपकी स्ट्रिंग के लिए 100 (128) बाइट आवंटित करेगा। हो सकता है कि यह केवल एक सूचक को संग्रहीत करे जहां वास्तविक डेटा के लिए जगह है।
तो अगर मैं आपकी आवश्यकता है तो मैं दृढ़ता से VARCHAR (100) का उपयोग करने का सुझाव दूंगा। यदि डीबी इसे संरेखित करने का फैसला करता है तो किसी भी तरह से अतिरिक्त आंतरिक डेटा के लिए भी जगह है।
अन्य तरीकों से: मान लें कि आप VARCHAR (128) का उपयोग करते हैं और सभी चीजें एक साथ आती हैं: डीबी आपके डेटा के लिए 128 बाइट आवंटित करता है। इसके अतिरिक्त इसे वास्तविक स्ट्रिंग लंबाई को स्टोर करने के लिए 2 बाइट्स की आवश्यकता होती है - 130 बाइट बनाता है - और फिर यह हो सकता है कि डीबी डेटा को अगले संरेखित करे (चलो 32 बाइट कहें) सीमा: डिस्क पर आवश्यक वास्तविक डेटा अब 160 बाइट्स है 8-}
क्या यह प्रश्न एक विशिष्ट आरडीबीएमएस या सामान्य के लिए है? –
क्या आप वर्चर्स फ़ील्ड में दशमलव डेटा स्टोर करना चाहते हैं? –
ypercube: mysql, InnoDB ट्यूडर: नहीं, केवल पाठ ... जब तक टेक्स्ट एक संख्या न हो :) – RandomWhiteTrash