2008-11-03 8 views
16

अगर मैं इस तरह एक मेज है:MySQL स्टोर Enums कैसे करता है?

CREATE TABLE sizes (
    name ENUM('small', 'medium', 'large') 
); 

MySQL प्रत्येक पंक्ति में उन तार स्टोर करने के लिए जा रहा है, या आंतरिक रूप से यह पूर्णांकों की तरह कुछ छोटे का उपयोग करेगा जो enum मूल्य का उल्लेख करने के पता है?

मैं एक टेबल में एक enum का उपयोग करना चाहता हूं, लेकिन मुझे चिंता है कि यह हर पंक्ति में एक स्ट्रिंग को स्टोर करने के रूप में अपमानजनक है।

उत्तर

22

यह उन्हें INSERT/UPDATE पर पूर्णांक में परिवर्तित करता है और चयन पर स्ट्रिंग पर वापस जाता है ताकि आंतरिक संग्रहण पूर्णांक के रूप में हो लेकिन आप इसका संपर्क नहीं कर पाएंगे।

आप SELECT mycolumn + 0 जैसे पूर्णांक को पुनर्प्राप्त कर सकते हैं।

ENUMs in MySQL 5

2

सबसे पहले, मैं अंतरिक्ष खपत के बारे में चिंता नहीं करता जब निर्णय लेने से किया जाए या नहीं एक enum उपयोग करने के लिए। डिस्क स्थान भरपूर और सस्ता दोनों है।

दूसरा, यह कॉलम परिभाषा में तारों को संग्रहीत करता है और फिर प्रत्येक रिकॉर्ड के भीतर उपयुक्त enum स्टोर करता है। this के अनुसार प्रत्येक रिकॉर्ड के साथ संग्रहीत मूल्य enum के भीतर मूल्यों की स्थिति का एक संख्यात्मक प्रतिनिधित्व है।

+3

यह केवल जगह नहीं बल्कि गति भी है। एक छोटी पंक्ति को पुनः प्राप्त करना तेज़ है, और मैं स्ट्रिंग की तुलना में एक enum पर जॉइन करना चाहता हूं। – Greg

+4

नोह, जब तक कि यह एक औसत अनुप्रयोग नहीं है, अन्यथा मैं आपके पहले पैराग्राफ – Pacerier

+1

से पूरी तरह से असहमत नहीं हूं, लेकिन – William

2

जैसा कि here समझाया गया है, enums को 0 (कोई मान्य मान सेट नहीं) और 65,535 के बीच मान के रूप में संग्रहीत किया जाता है जो एक गणना सूचकांक से जुड़े होते हैं। तालिका में संग्रहीत मान 2 बाइट मान है, स्ट्रिंग नहीं।

+3

मुझे यह जोड़ना चाहिए कि यदि संख्याओं की संख्या 255 या उससे कम है, तो केवल ** 1 बाइट ** का उपयोग किया जाता है (समान टिन्यिनट के लिए)। (रेफरी: mysql5 दस्तावेज़) – Sina