2013-02-10 24 views
50

MySQL डेटा प्रकार "enum" और "set" के लिए एक बनाम दूसरे का उपयोग करने के अंतर और फायदे और नुकसान क्या हैं?MySQL enum बनाम सेट

उदाहरण डेटा प्रकार:

  • enum ('ए', 'बी', 'सी')
  • सेट ('ए', 'बी', 'सी')

एकमात्र अंतर जिसे मैं जानता हूं वह यह है कि ईएनई केवल एक मान को चुनने की अनुमति देता है बनाम एसईटी कई मानों को चुनने की अनुमति देता है।

+3

नहीं adv/disadv । आपको अपनी आवश्यकताओं के आधार पर उनमें से एक चुनना चाहिए। – ravnur

+1

दो प्रकार असंबद्ध हैं। आप यह भी पूछ सकते हैं कि कौन सा बेहतर है - int या text? – Bohemian

उत्तर

54

MySQL documentation राज्यों के रूप में:

एक Enum की परिभाषा या सेट स्तंभ स्तंभ में दर्ज किए गए मानों पर एक बाधा के रूप में कार्य करता है। उन मानों के लिए एक त्रुटि होती है जो इन शर्तों को पूरा नहीं करते हैं:

एक ENUM मान कॉलम परिभाषा में सूचीबद्ध लोगों में से एक होना चाहिए, या आंतरिक संख्यात्मक समकक्ष समकक्ष होना चाहिए। मान मान (यानी, 0 या खाली स्ट्रिंग) त्रुटि नहीं हो सकता है। ENUM ('a', 'b', 'c') के रूप में परिभाषित कॉलम के लिए, '', 'd', या 'ax' जैसे मान अवैध हैं और अस्वीकार कर दिए गए हैं।

एक एसईटी मान खाली स्ट्रिंग या एक मान है जो केवल मानों को अल्पविराम से अलग कॉलम परिभाषा में सूचीबद्ध किया गया है। एसईटी ('ए', 'बी', 'सी') के रूप में परिभाषित कॉलम के लिए, 'डी' या 'ए, बी, सी, डी' जैसे मान अवैध हैं और अस्वीकार कर दिए गए हैं।

+11

नोट! '(ए, बी, सी, डी) 'का मूल्य अस्वीकार नहीं किया जाएगा। बस 'डी' को अस्वीकार कर दिया जाएगा जिसके परिणामस्वरूप मूल्य '(ए, बी, सी)' होगा। –

+2

यह आधिकारिक दस्तावेज हो सकता है, लेकिन यह अभी भी उनका वर्णन करने का एक बहुत भ्रमित तरीका है। अन्य उत्तरों के आधार पर अंतर स्पष्ट हो जाता है। एसईटी ईएनएन की एक सरणी है, जहां प्रत्येक मान में 0 या अधिक enum शैली मान होते हैं। – Jonathon

+1

यह एक अच्छा जवाब नहीं है। अंतर और डी/फायदे के स्पष्ट स्पष्टीकरण के लिए पूछा गया था; आधिकारिक दस्तावेज, जिसमें से यह उत्तर एक प्रतिलिपि है, ऐसा करने में विफल रहता है। सख्त मोड चालू होने पर – Smuuf

35

एनम और सेट पूरी तरह से आवश्यकताओं पर निर्भर करता है, जैसे कि आपके पास रेडियो बटन की एक सूची है जहां एक समय में केवल एक ही चुना जा सकता है, Enum का उपयोग करें। और यदि आपके पास चेकबॉक्स की एक सूची है जहां एक समय में एक आइटम चुना जा सकता है, तो सेट का उपयोग करें।

13
CREATE TABLE setTest(
    attrib SET('bold','italic','underline') 
); 

INSERT INTO setTest (attrib) VALUES ('bold'); 
INSERT INTO setTest (attrib) VALUES ('bold,italic'); 
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline'); 

आप उपरोक्त कोड कॉपी कर सकते हैं और mysql में पेस्ट, और आप पाएंगे कि सेट वास्तव में एक संग्रह है। आप अपने द्वारा घोषित विशेषताओं के प्रत्येक संयोजन को स्टोर कर सकते हैं।

CREATE TABLE enumTest(
color ENUM('red','green','blue') 
); 

INSERT INTO enumTest (color) VALUES ('red'); 
INSERT INTO enumTest (color) VALUES ('gray'); 
INSERT INTO enumTest (color) VALUES ('red,green'); 

आप उपरोक्त कोड को भी कॉपी कर सकते हैं। और आप पाएंगे कि प्रत्येक ENUM वास्तव में प्रत्येक बार केवल एक बार स्टोर किया जा सकता है। और आप पाएंगे कि पिछले 2 लाइनों के परिणाम दोनों खाली होंगे।

78

सादृश्य:
Enum = रेडियो क्षेत्र (केवल स्वीकार कर लिया मूल्यों केवल एक का चयन कर सकते हैं, सूचीबद्ध होते हैं)
सेट = चेकबॉक्स क्षेत्रों (केवल स्वीकार किए जाते हैं मानों उन सूचीबद्ध हैं, कई चुन सकते हैं)

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