2012-02-05 16 views
8

मैं एक MySQL डीबी बना रहा हूं जो साप्ताहिक डेटा सेट से बना है, जो पिछले दशक के लिए वापस जा रहा है। हाल के रिकॉर्ड के लिए कुछ डेटा पॉइंट मौजूद हैं, लेकिन जिन्हें पुराने डेटा सेट में ट्रैक नहीं किया गया था। प्रश्न वाले फ़ील्ड में सभी पूर्णांक मान होते हैं, और '0' डेटा बिंदुओं को ट्रैक करने वाले रिकॉर्ड के लिए एक पूर्ण रूप से मान्य (और लगातार) मान है। मुझे शून्य और गैर-मौजूद डेटा के मान के बीच अंतर करने में सक्षम होना चाहिए। इसलिए, मुझे यह पता लगाना होगा कि क्या एक एनयूएलएल स्टोर करना संभव है जिसे एक आईएनटी प्रकार के लिए '0' (पढ़ें: ब्लैक सेल) के रूप में प्रदर्शित नहीं किया जाता है। हालांकि, डीबी को पास किए गए कुल मूल्य '0' के रूप में दर्शाए जाते हैं (कम से कम, वे phpMyAdmin में हैं), क्या इसे बदलने का कोई तरीका है?MySQL INT प्रकार गैर-शून्य NULL

आपकी मदद के लिए धन्यवाद।

+0

मुझे लगता है कि आपको कॉलम को शून्य मान रखने की अनुमति देनी चाहिए। लेकिन संक्षिप्त जवाब यह है: हाँ, int कॉलम में कुल मान हो सकते हैं। –

उत्तर

11

आप मूल्य को शून्य पर सेट कर सकते हैं। INSERT INTO table (INT_COLUMN) VALUES (NULL) मान्य एसक्यूएल है (INT_COLUMN एक निरर्थक int कॉलम होने के साथ)।

+0

Ive ने रिक्त "" और NULL दोनों के रूप में मान को पार करने का प्रयास किया, और दोनों परिस्थितियों में यह "0" (कम से कम PHPMyAdmin में ब्राउज़ करते समय) के रूप में दिखाता है ... – dgeare

+0

क्या आपने कॉलम का डिफ़ॉल्ट मान 0 पर सेट किया है? यहां अपनी टेबल परिभाषा पेस्ट करें। –

+0

'nullable' –

2

हां, सुनिश्चित करें कि आपकी तालिका प्रश्न में कॉलम में नल मानों को अनुमति देने के लिए डिज़ाइन की गई है।

DROP TABLE IF EXISTS testTable; 
CREATE TABLE `testTable` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `data` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
; 

INSERT INTO testTable VALUES 
(NULL, 100), 
(NULL, 200), 
(NULL, NULL), 
(NULL, 400); 

SELECT * FROM testTable; 

चयन निम्न परिणाम होगा: नीचे बहुत ही बुनियादी उदाहरण देखें

+----+------+ 
| id | data | 
+----+------+ 
| 1 | 100 | 
| 2 | 200 | 
| 3 | NULL | 
| 4 | 400 | 
+----+------+ 
+0

यहां अन्य टिप्पणियों के अनुसार, यदि आप "शो बनाने तालिका " कथन के लिए आउटपुट दिखा सकते हैं तो हम पुष्टि कर सकते हैं कि आपकी समस्या तालिका परिभाषा के साथ है या नहीं। – StudyOfCrying

8

उत्तर "हां" है - आप नल पूर्णांक कॉलम हो सकता है। लेकिन क्या आपको चाहिए?

अक्सर, null का दुरुपयोग और गलत समझा जाता है। एसक्यूएल डेटाबेस में, null का मतलब है "अज्ञात"। आपकी स्थिति में, null का उपयोग करना सही है, इसलिए "हाँ - आपको"

ऐसे मामले हैं जब आप "शून्य" के लिए एक विशिष्ट मान का उपयोग करना चाहते हैं, उदाहरण के लिए -1 मात्रा के लिए। यह दृष्टिकोण वैध है और क्योंकि प्रश्नों में nulls के साथ काम कर पिछवाड़े में एक दर्द है, आवेदन कोड और SQL आसान बनाने के लिए प्रयोग किया जाता है:

  • आप विशेष सिंटैक्स का उपयोग करने के लिए है "शून्य है"
  • किसी भी सूची एक अशक्त युक्त मेल खाते हैं कभी नहीं होगा कुछ भी, जैसे WHERE NAME IN (SELECT COL1 FROM SOMETABLE) कभी काम नहीं करेगा अगर चुने गए मानों के किसी भी रिक्त है
  • अशक्त करता बराबर नहीं कुछ और, यहां तक ​​कि एक और अशक्त
  • सख्त (जैसे जावा) एप्लिकेशन को कोड में, आप एक चेक है कि एक मूल्य शून्य है या आप एक NullPointerException मिलेगा। वास्तविक मूल्य का उपयोग इस
+6

कुछ मामलों में "जादू" मानों का उपयोग करना अच्छा हो सकता है लेकिन यह गधे में भी दर्द हो सकता है। यदि आपके पास कुछ '-1' मान हैं तो एक सामान्य' SUM() 'या' AVG() 'गलत परिणाम देगा। –

2

यह मुझे कभी आश्चर्यचकित नहीं करता कि लोग वास्तव में बिना किसी पूछे जाने वाले प्रश्नों का उत्तर कैसे देते हैं। मैं phpMyAdmin में एक ही चीज़ देख रहा हूँ। नल को अनुमति दें और यह रिकॉर्ड अपडेट नहीं कर रहा है, "IS NULL" या "" या शून्य काम नहीं करता है। स्तंभ INT मान कुछ द्वारा लागू किया जा रहा है .... बीटीडब्लू, अगर कोई जावास्क्रिप्ट कहता है, तो वे 'अंडरस्कोर', JQuery, या किसी अन्य जावास्क्रिप्ट एक्सटेंशन का उपयोग करके कोई जवाब नहीं चाहते हैं, ऐसा कोई जवाब प्रोफ़ाइल के लिए स्वचालित -10 होना चाहिए !!!

+1

तो, ऐसा प्रतीत होता है कि phpMyAdmin वह समस्या थी जिसे मैं अनुभव कर रहा था। मैं mysql सीएलआई में INT कॉलम मान को NULL पर सेट करने में सक्षम था लेकिन phpMyAdmin में नहीं। – Quadrivium

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