2011-08-09 7 views
23

मेरे पास कुछ फ़ील्ड के साथ डेटाबेस तालिका है, उनमें से एक, cost, DECIMAL डेटा प्रकार पर सेट है। मैंने पैरामीटर को 4,2 पर सेट किया है, जो दशमलव बिंदु से पहले 4 संख्याओं और 2 बाद में अनुमति देनी चाहिए।MyCQL डेटाबेस में DECIMAL को कैसे सम्मिलित करें

(मुझे बताया गया है कि यहां 4 कुल राशि है, और 2 दशमलव के बाद राशि है, किसी को स्पष्ट कर सकता है कृपया है कि एक तरफ ध्यान दें पर?)

जब मैं के माध्यम से डेटा सम्मिलित एक POST अनुरोध (उदाहरण के लिए मूल्य 3.80) मेरे डेटाबेस में संग्रहीत डेटा वास्तव में 99.99 है।

मैं इसका कारण क्या गलत कर रहा हूं?

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`title` varchar(256) NOT NULL, 
`cost` decimal(4,2) NOT NULL, 
PRIMARY KEY (`id`) 
) 

यहाँ मेरी ऐड क्वेरी है::

यहाँ तालिका है

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80') 

अद्यतन: यह काम करता है के बाद मैं 6,2

+0

आइए देखें तालिका विवरण और एसक्यूएल को मान डालने के लिए प्रयुक्त – Mark

उत्तर

30

MySQL दशमलव प्रकार दशमलव बिंदु के बाएं और दाएं-दाएं से थोड़ा अधिक जटिल हैं।

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

इस प्रकार, (4,2)-99.99 से 99.99 से कुछ भी हो सकता है।

तुम क्यों 99.99 हो रही है बजाय वांछित 3.80 की, मूल्य आप डालने कर रहे हैं, 99.99 से बड़ा के रूप में व्याख्या किया जाना चाहिए ताकि अधिकतम मूल्य प्रयोग किया जाता है का सवाल है। हो सकता है कि आप उस कोड को पोस्ट कर सकें जिसका उपयोग आप तालिका को सम्मिलित या अपडेट करने के लिए कर रहे हैं।

संपादित

पैमाने पर और परिशुद्धता के उपयोग के किसी गलतफ़हमी को सुधारा, http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html प्रति।

6

हाँ करने के लिए 4,2 बदल गया है, 4,2 का अर्थ है "कुल 4 अंक, जिनमें से 2 दशमलव स्थान के बाद हैं"। यह 00.00 के प्रारूप में एक संख्या में अनुवाद करता है। इसके अलावा, आपको हमें अपनी एसक्यूएल क्वेरी दिखाना होगा। PHP बिना किसी कारण के 3.80 में 99.99 का अनुवाद नहीं करेगा। शायद आपने क्वेरी में अपने फ़ील्ड/मानों को गलत तरीके से ग़लत कर दिया है और किसी अन्य फ़ील्ड में मौजूद एक बड़ी संख्या डालने की कोशिश कर रहे हैं।

2

मैं अपने कोडिंग के बारे में कुछ और ही देखा .... देखो

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80') 

अपने "टेबल बनाएं" कोड में आप आईडी सेट "AUTO_INCREMENT" यह अपने आप उस क्षेत्र के लिए एक परिणाम पैदा कर रहा है, जिसका अर्थ है करने के लिए। ... लेकिन आपके उपरोक्त कोड में आप इसे सम्मिलन में से एक के रूप में शामिल करते हैं और "मूल्य" में आपके पास 0 है ... idk अगर यह हमें बताए जाने का आपका तरीका है तो आपने इसे खाली छोड़ दिया क्योंकि यह AUTO_INC पर सेट है। या यदि यह वास्तविक कोड है तो आपके पास ...अगर यह कोड आप न केवल आप एक क्षेत्र सेट करने के लिए डेटा भेजने के लिए यह स्वचालित रूप से उत्पन्न करने के लिए कोशिश कर रहा है नहीं किया जाना चाहिए है, लेकिन ऐसा करने के लिए सही तरीका है यह गलत होगा

'0', 

डाल

0, 

लॉल .... ताकि कुछ समस्या हो सकती है ... मैंने "टेस्ट विवरण" के बाद कोड में भी ध्यान दिया है, जो आपके पास पहले से एक जगह है .... .... जो कुछ भी फेंक सकता है .. .. idk .. मुझे उम्मीद है कि यह मदद करता है n शायद किसी अन्य समस्या को हल कर सकता है जो आप अपने बालों को अब बाहर खींच रहे हैं .... किसके बारे में बात कर रहे हैं .... मुझे अपने सभी बालों को फाड़ने से पहले मेरी समस्या का पता लगाने की जरूरत है। .... सौभाग्य .. :)

अद्यतन .....

मैं लगभग भूल गया ... अगर आपको लगता है कि यह खाली है दिखाने के लिए वहाँ 0 है ... आप में प्रवेश किया जा सकता है "परीक्षण शीर्षक" आईडी के रूप में और शीर्षक के रूप में "परीक्षण विवरण" शीर्षक के बाद "3. जो भी सेंट" विवरण छोड़ने के लिए "लागत" खाली है ...... जो कि यह अधिकतम हो सकता है क्योंकि अगर मैं गलत नहीं कर रहा हूं तो आपने इसे पूर्ण नहीं किया है। ... और आपने इसे शून्य कर दिया ... तो यह कुछ मजबूर हो गया ... शायद .... lol

+2

आपके उत्तर के लिए धन्यवाद - मेरे पास था यद्यपि आपने अपना जोड़ा जोड़ने से पहले 2 महीने सही जवाब स्वीकार किया! 'Auto_increment' पर सेट किए गए फ़ील्ड में '0' पास करना वही है जो इसे खाली छोड़ देता है। – Alex