2009-10-06 16 views
27

मेरे पास MySQL में टाइप दशमलव (3,2) का एक फ़ील्ड है, जो कि 9.3 9 के मान होते हैं जब मैं 78.3 जैसे कुछ डालता हूं। क्यूं कर?माईएसक्यूएल में दशमलव (3,2) मान हमेशा 9.99

mysql> insert into testtable (firstname, lastname, justsomenum) values ("Lloyd", "Christmas", 83.5); 

मैं 9.99 मिलता है जब मैं का चयन करें:

mysql> describe testtable; 
+---------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+---------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| firstname  | varchar(20) | YES |  | NULL |    | 
| lastname  | varchar(20) | YES |  | NULL |    | 
| justsomenum | decimal(3,2) | YES |  | NULL |    | 
+---------------+--------------+------+-----+---------+----------------+ 

जब मैं इस का चयन करें और की तरह कुछ सम्मिलित करें:

इस तरह मेरे तालिका दिखाई देता है।

mysql> select * from testtable; 
+----+-----------+-----------+---------------+ 
| id | firstname | lastname | justsomenum | 
+----+-----------+-----------+---------------+ 
| 1 | Shooter | McGavin |   9.99 | 
| 2 | Lloyd  | Christmas |   9.99 | 
| 3 | Lloyd  | Christmas |   9.99 | 
| 4 | Lloyd  | Christmas |   9.99 | 
+----+-----------+-----------+---------------+ 
4 rows in set (0.00 sec) 

यह मैक ओएस एक्स 10.5.8 पर MySQL 5.0.86 है।

कोई विचार? धन्यवाद।

+3

+ वास्तव में स्कीमा और प्रश्न प्रदान करने के लिए अपवोट, जो कुछ भी आप अक्सर देखते हैं :) –

+0

MySQL की एक और अच्छी सुविधा - चुपचाप आपके डेटा को संशोधित करना ताकि सम्मिलन विफल न हो ... –

उत्तर

51

decimal(3, 2) के लिए अधिकतम मूल्य 9.99 है, इसलिए जब आप उससे बड़ा कुछ डालने का प्रयास करते हैं, तो यह 9.99 तक सीमित है। यदि आप बड़ी संख्या में स्टोर करना चाहते हैं तो decimal(5, 2) या कुछ और कोशिश करें।

पहला तर्क सटीकता के अंकों की कुल संख्या है, और दूसरा तर्क दशमलव बिंदु के बाद अंकों की संख्या है।

+1

सहायता के लिए धन्यवाद। मैंने दशमलव (एम, डी) का अर्थ यह लिया कि मूल्य से कोई फर्क नहीं पड़ता, मैं दशमलव के बाईं ओर दशमलव स्थान और डी स्थानों को दशमलव के दाईं ओर रख सकता था। – labratmatt

16

पुराने संस्करणों में MySQL DECIMAL (3,2) का अर्थ डीपी के बाईं ओर 3 पूर्णांक और दाईं ओर 2 पूर्णांक था।

MySQL devs ने तब से इसे बदल दिया है, इसलिए पहली संपत्ति (इस मामले में '3') दशमलव में पूर्णांक की पूर्ण संख्या (9.9 9 तीन संख्याएं) है, और दूसरी संपत्ति (इस मामले में '2') वही रहता है - दशमलव स्थानों की संख्या।

यह थोड़ा उलझन में है। मूल रूप से, DECIMAL फ़ील्ड के लिए, डीपी से पहले जो भी पूर्णांक आप चाहते हैं को डीपी के बाद जो भी पूर्णांक चाहते हैं, उसे सेट करें और अपना पहला विकल्प के रूप में सेट करें।

फिर जैसा कि पहले ही कहा जा चुका है, यदि आप फ़ील्ड के अधिकतम मूल्य से अधिक संख्या दर्ज करने का प्रयास करते हैं, तो MySQL इसे आपके लिए ट्रिम करता है। यहां समस्या आपकी MySQL कॉन्फ़िगरेशन है। मैं इस on my blog के बारे में अधिक जानकारी में जाता हूं।

+0

अच्छा ब्रेक-डाउन, scrumpyjack। क्यों MySQL ने सम्मेलन में यह परिवर्तन किया है मेरे बाहर है। मुझे लगता है कि मैं इसे एक दिन गूगल कर दूंगा। – micahwittman

+0

पुराने संस्करण नियम का जिक्र करना वाकई बहुत अच्छा है क्योंकि किसी को शायद इसे किसी निराशाजनक आश्चर्य में बाद में खोजने के लिए गुमराह होने का सामना करना पड़ सकता है। –

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