2011-12-19 15 views
12

मुझे आशा है कि यह एक बेवकूफ सवाल नहीं है। आप सभी चर या किसी फंक्शन के लिए फ़ंक्शन के लिए डिफ़ॉल्ट मान सेट कर सकते हैं। लेकिन यदि फ़ील्ड को सम्मिलित करने की आवश्यकता नहीं है और आप शून्य मानों की अनुमति नहीं देते हैं, तो आप "खाली" मान क्या है जिसे आप phpMyAdmin में देखते हैं? एक प्रश्न में यह खाली स्ट्रिंग, आदि के रूप में वापस आ गया है?यदि कोई डिफ़ॉल्ट मान प्रदान नहीं किया गया है तो फ़ील्ड के लिए डिफ़ॉल्ट मान क्या है?

बस इसे समझने की कोशिश कर रहा है, मैं सभी रिकॉर्ड के लिए पूछना चाहता हूं कि उस रिकॉर्ड में किसी विशिष्ट कॉलम के लिए मान "रिक्त" या रिक्त या जो भी हो।

धन्यवाद।

उत्तर

22

manual का जिक्र करते हुए ,

एक पूर्ण नल कॉलम के लिए डेटा प्रविष्टि के लिए जिसमें कोई स्पष्ट DEFAULT नहीं है खंड, अगर एक सम्मिलित करें या बयान REPLACE स्तंभ के लिए कोई मूल्य नहीं शामिल है, या एक अद्यतन बयान शून्य करने के लिए स्तंभ सेट, MySQL समय में प्रभाव में एसक्यूएल मोड के अनुसार संभालती स्तंभ:

  • सख्त हैं एसक्यूएल मोड सक्षम नहीं है, MySQL कॉलम डेटा प्रकार के लिए कॉलम को अंतर्निहित डिफ़ॉल्ट मान पर सेट करता है।
  • यदि सख्त मोड सक्षम है, तो लेनदेन संबंधी तालिकाओं के लिए एक त्रुटि होती है और कथन वापस लुढ़का जाता है। Nontransactional तालिकाओं के लिए,
    त्रुटि होती है, लेकिन यदि यह की दूसरी या बाद की पंक्ति के लिए एक बहु-पंक्ति विवरण के लिए होता है, तो पिछली पंक्तियां डाली जाएंगी।

तो आपके सवाल का अब हो सकता है, विभिन्न स्तंभ डेटा प्रकार के लिए अंतर्निहित मूलभूत मूल्यों क्या हैं? ये रहा:

  • सांख्यिक प्रकार के लिए, डिफ़ॉल्ट, 0 अपवाद है कि पूर्णांक या फ्लोटिंग प्वाइंट प्रकार के लिए AUTO_INCREMENT
    विशेषता के साथ घोषित साथ:

    अंतर्निहित चूक इस प्रकार परिभाषित कर रहे हैं , डिफ़ॉल्ट अनुक्रम में अगला मान है।

  • TIMESTAMP के अलावा दिनांक और समय के प्रकार के लिए, डिफ़ॉल्ट प्रकार के लिए उपयुक्त "शून्य" मान है। किसी तालिका में पहले TIMESTAMP कॉलम के लिए, डिफ़ॉल्ट मान वर्तमान दिनांक और समय है। खंड 10.3, "दिनांक और समय प्रकार" देखें।
  • ईएनएन के अलावा स्ट्रिंग प्रकारों के लिए, डिफ़ॉल्ट मान खाली स्ट्रिंग है। ईएनएन के लिए, डिफ़ॉल्ट पहला गणना मूल्य है।
0

जब तक आप एक निर्दिष्ट नहीं करते हैं तब तक कोई डिफ़ॉल्ट मान नहीं है (यानी जब तक आप प्रश्न में कॉलम के लिए "डिफ़ॉल्ट बाधा" परिभाषित नहीं करते)।

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

यह सभी कॉलम घोषित करने के लिए अच्छी आदत है "रिक्त नहीं:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

यहाँ एक उदाहरण एक डिफ़ॉल्ट के साथ तालिका बनाने के लिए:

यहाँ मौजूदा स्तंभ पर एक डिफ़ॉल्ट जोड़ने के लिए एक उदाहरण है ", और उचित बाधाओं को उचित के रूप में प्रदान करें।

उपरोक्त "किताबें" उदाहरण में, यदि आप PubID निर्दिष्ट किए बिना "सम्मिलित" करते हैं, तो PubID शून्य होगा।

उसी उदाहरण में, यदि आप आईडी या नाम निर्दिष्ट किए बिना "डालें" ... आपको एक त्रुटि मिल जाएगी।

आप MySQL एक आईडी ऑटो आवंटित हैं, तब यह वाक्य विन्यास का उपयोग करना चाहते हैं:

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 
-1

आप अस्वीकृत करने के लिए अशक्त चाहते हैं: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

ऊपर क्वेरी अशक्त की अनुमति नहीं देने और आवंटित करेगा जब मूल्य प्रदान नहीं किया जाता है तो एक खाली स्ट्रिंग।
phpmysqladmin में, blank = empty
PHP mysqli function या mysql function, null value is returned as null के माध्यम से अभी भी।

एक बार जब आप क्वेरी लागू है, तो आप आसानी से कि

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

हालांकि का उपयोग करके फ़िल्टर कर सकते हैं, सबसे अच्छा है कि आप इस से पहले बदलने के लिए करते हैं: -

update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

ऐसा करना बुद्धिमान नहीं है। 'NULL' का मतलब मूल्य की कमी (अज्ञात) है और ** ** ** खाली मूल्य के समान नहीं है। –