MySQL DECIMAL का उपयोग कैसे करें?


177

मुझे MySQL के DECIMAL का बहुत कुछ नहीं मिल रहा है। मुझे पंक्ति को 00.0001 से 99.9999 तक कहीं भी शामिल करने में सक्षम होने की आवश्यकता है। मैं इसे कैसे काम करने के लिए संरचना करूँगा?



4
आपको वास्तव में सही उत्तर को स्वीकार करना चाहिए। वर्तमान में स्वीकृत उत्तर गलत है।
२०:५० पर ओलहोवस्की

2
यहाँ समाप्त हुआ और यह दावा करते हुए पढ़ें कि DECIMAL UNSIGNED संभव नहीं है। इसके लिए सही कल्पना के लिए नीचे दिया गया ताज़ा उत्तर देखें।
मार्कस एओ

जवाबों:


439

DOUBLE कॉलम DECIMAL कॉलम के समान नहीं हैं, और यदि आप वित्तीय डेटा के लिए DOUBLE कॉलम का उपयोग करते हैं, तो आपको परेशानी होगी

DOUBLE वास्तव में FLOAT का केवल एक डबल सटीक (32 बिट के बजाय 64 बिट) संस्करण है । फ्लोटिंग पॉइंट नंबर वास्तविक संख्याओं के अनुमानित प्रतिनिधित्व हैं और वे सटीक नहीं हैं। वास्तव में, 0.01 जैसी सरल संख्याओं का FLOAT या DOUBLE प्रकारों में सटीक प्रतिनिधित्व नहीं है।

DECIMAL कॉलम सटीक निरूपण हैं, लेकिन वे संभावित संख्याओं की एक छोटी श्रेणी के लिए बहुत अधिक स्थान लेते हैं। 0.0001 से 99.9999 तक मान रखने में सक्षम एक स्तंभ बनाने के लिए जैसे आपने पूछा कि आपको निम्नलिखित कथन की आवश्यकता होगी

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);

स्तंभ की परिभाषा प्रारूप DECIMAL (M, D) का अनुसरण करती है, जहाँ M अंकों की अधिकतम संख्या ( सटीक ) है और D दशमलव बिंदु के दाईं ओर अंकों की संख्या ( पैमाना ) है।

इसका मतलब है कि पिछली कमांड एक कॉलम बनाती है जो -99.9999 से 99.9999 तक के मूल्यों को स्वीकार करती है। आप 0.0000 से 99.9999 तक का एक UNSIGNED DECIMAL कॉलम भी बना सकते हैं।

MySQL DECIMAL की अधिक जानकारी के लिए आधिकारिक डॉक्स हमेशा एक बेहतरीन संसाधन होते हैं।

ध्यान रखें कि यह सभी जानकारी MySQL 5.0.3 और इससे अधिक के संस्करणों के लिए सही है। यदि आप पिछले संस्करणों का उपयोग कर रहे हैं, तो आपको वास्तव में अपग्रेड करना चाहिए।


17
अपना उत्तर दिया। आपका उत्तर सही है, अन्य उत्तर नहीं है (क्योंकि यह दावा करता है कि "डबल = दशमलव")। DECIMAL एक सटीक मान वाला एक निश्चित बिंदु है और इसके पर्यायवाची शब्द NUMERIC, DEC और FIXED हैं। DOUBLE नहीं, क्योंकि DOUBLE एक फ़्लोटिंग-पॉइंट प्रकार है जो अनुमानित संख्यात्मक डेटा मानों का प्रतिनिधित्व करता है। DECIMAL (<1-65>, <0-30>) का उपयोग करते समय, पहला पैरामीटर अंकों की संख्या है, दशमलव बिंदु के दाईं ओर अंकों की दूसरी संख्या है।
नॉर्बर्ट

2
हाँ आप सही है। ध्यान दें कि MySQL 5.0.3 के लिए काम करते हैं, dev.mysql.com/doc/refman/5.1/en/prepy-math-examples.html
ajreal

1
पोस्टर ने एक दशमलव क्षेत्र के लिए कहा, जिसमें 0.0001 और 99.9999 के बीच मान थे। मैंने यह स्पष्ट करने के लिए कुछ अतिरिक्त जानकारी जोड़ी कि क्षेत्र वास्तव में -99.9999 से 99.9999 तक के मूल्यों का समर्थन करता है। प्रतिक्रिया के लिए धन्यवाद! इसके अलावा MySQL संस्करण अस्वीकरण जोड़ा गया।
एलेक्स रिकारे

1
आपने कहा "" अहस्ताक्षरित "DECIMAL कॉलम" बनाने का कोई तरीका नहीं है, फिर भी आपका कोड उदाहरण "DECIMAL (6,4) UNSIGNED NOT NULL" दर्शाता है। ऐसा क्यों है?
लियांग

3
@AlexRecarey मुझे लगता है कि ठीक है एक अद्वितीय बनाने में सक्षम होने के लिए; और MySQL 5.x के लिए मैनुअल सहमत हैं DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]:। यह नकारात्मक मानों के लिए एक आउट-ऑफ-रेंज त्रुटि लौटाएगा। आप इसी तरह अहस्ताक्षरित FLOAT और DOUBLE बना सकते हैं। मैनुअल: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
मार्कस AO

67

यद्यपि ऊपर दिए गए उत्तर सही प्रतीत होते हैं, बस आपको यह कैसे काम करता है, इसका अंदाजा लगाने के लिए एक सरल व्याख्या।

मान लीजिए कि आपका कॉलम होना तय है DECIMAL(13,4)। इसका अर्थ है कि कॉलम का कुल आकार 13 अंकों का होगा जहां इनमें से 4 का उपयोग सटीक प्रतिनिधित्व के लिए किया जाएगा।

तो, सारांश में, उस कॉलम के लिए आपके पास अधिकतम मूल्य होगा: 999999999.9999


1
यहाँ सबसे अच्छा जवाब
जूलियन सिल्वेस्ट्री

15

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

आपको DECIMAL (6,4) का उपयोग करना होगा।

तब आपके पास 6 कुल अंक हो सकते हैं, 2 पहले और 4 दशमलव बिंदु (स्केल) के बाद। के अनुसार कम से कम इस


6

दशमलव डेटाटाइप के लिए MySQL 5.x विनिर्देशन है DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]:। उपरोक्त उत्तर यह कहने में गलत है कि अहस्ताक्षरित दशमलव संभव नहीं है।

एक फ़ील्ड को केवल अहस्ताक्षरित दशमलवों को परिभाषित करने के लिए, जिसकी कुल लंबाई 6 अंकों की है, जिनमें से 4 दशमलव हैं, आप उपयोग करेंगे DECIMAL (6,4) UNSIGNED:।

आप इसी तरह अहस्ताक्षरित बना सकते हैं (यानी नकारात्मक नहीं) FLOAT और दोहरा डेटा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.