2009-12-08 16 views
11

मैं phpMyAdmin के साथ MySQL में एक सरल 'हां'/'शायद'/'नहीं' Enum बनाने की कोशिश कर रहा हूं, मैंने न्यूल को नो सेट किया है, और 'शायद' डिफ़ॉल्ट मानMySQL Enum में हमेशा संभावनाओं में '' (खाली स्ट्रिंग) होती है

के रूप में मैं एक त्रुटि जब की तरह "सेट EnumCol = ''" कुछ को क्रियान्वित करने की उम्मीद कर रहा हूँ, क्योंकि '' (कोई रिक्त स्ट्रिंग) कोई मान्य मान नहीं होना चाहिए। लेकिन क्वेरी निष्पादित हो जाती है और मान '' पर सेट हो जाता है - जिसका अर्थ है कि जब भी मैं डेटाबेस से पढ़ता हूं तो मुझे इस अनचाहे और अवैध मूल्य के लिए दोबारा जांच करने के लिए मजबूर होना पड़ता है!

इस MySQL या phpMyAdmin में एक बग है? क्या कोई इस व्यवहार को अक्षम करने का तरीका जानता है?

धन्यवाद।

उत्तर

19

खाली स्ट्रिंग ENUM में अमान्य मान की त्रुटि सूचक है। mysql ENUM type manual से:

आप एक Enum में एक अमान्य मान सम्मिलित करें (जो है, अनुमति प्राप्त मान की सूची में मौजूद नहीं एक स्ट्रिंग), खाली स्ट्रिंग के बजाय एक विशेष त्रुटि मान के रूप में डाला जाता है। इस स्ट्रिंग को "सामान्य" खाली स्ट्रिंग से इस तथ्य से अलग किया जा सकता है कि इस स्ट्रिंग में संख्यात्मक मान 0 है। इसके बारे में और अधिक। सख्त एसक्यूएल मोड सक्षम होता है

हैं, अवैध Enum मान एक त्रुटि में परिणाम को सम्मिलित करने का प्रयास करता है:

इस व्यवहार को निष्क्रिय करने के।

सख्त मोड सक्षम करने के Server SQL Modes देखते हैं।

-2

Enum के बट में एक दर्द कर रहे हैं। जब तक आपको किसी संख्या से मूल्य निर्धारित करने की आवश्यकता न हो, मैं उनसे दूर रहूंगा।

बजाय, मूल्यों प्रतिबन्धित करने के लिए लुकअप तालिका के लिए एक विदेशी कुंजी के साथ एक varchar स्तंभ का उपयोग करें। इससे खराब मूल्य डालना असंभव हो जाएगा।

+0

लेकिन 'ENUM' प्रकार जोड़तोड़ तेजी से तो विदेशी कुंजी की जांच की जाएगी। –

+3

सच। लेकिन कौन परवाह करता है? यह शायद एक ऐसा एप्लीकेशन नहीं है जिसमें प्रति मिनट 10k इन्सर्ट हों, जहां एनम पर स्विचिंग प्रदर्शन में सुधार करेगी। गति के लिए विदेशी कुंजी पर enum चुनना समयपूर्व अनुकूलन का मामला है। – longneck

+0

मैं एफके के साथ लुकअप टेबल का उपयोग करने के इस वैकल्पिक समाधान की सराहना करता हूं। यह भी अधिक विस्तार योग्य लगता है। –

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