मुद्रा मूल्यों के लिए सबसे अच्छा एसक्यूएल डेटा प्रकार क्या है? मैं MySQL का उपयोग कर रहा हूं, लेकिन एक डेटाबेस स्वतंत्र प्रकार को पसंद करेगा।
मुद्रा मूल्यों के लिए सबसे अच्छा एसक्यूएल डेटा प्रकार क्या है? मैं MySQL का उपयोग कर रहा हूं, लेकिन एक डेटाबेस स्वतंत्र प्रकार को पसंद करेगा।
जवाबों:
Decimal(19,4)
आमतौर पर ज्यादातर मामलों में कुछ बहुत अच्छा काम करता है। आपके द्वारा संग्रहित किए जाने वाले नंबरों की जरूरतों को पूरा करने के लिए आप पैमाने और सटीकता को समायोजित कर सकते हैं। SQL सर्वर में भी, मैं money
गैर-मानक के रूप में " " का उपयोग नहीं करता हूं ।
(19,4)
बजाय का उपयोग करने के लिए लाभ क्या है (19,2)
?
केवल एक चीज जो आपको देखनी है, वह यह है कि यदि आप एक डेटाबेस से दूसरे डेटाबेस में जाते हैं, तो आप पा सकते हैं कि DECIMAL (19,4) और DECIMAL (19,4) का मतलब अलग-अलग चीजें हैं
( http://dev.mysql.com/doc/refman/5.1/en/preaches-math-decimal-bages.html )
DBASE: 10,5 (10 पूर्णांक, 5 दशमलव) MYSQL: 15,5 (15 अंक, 10 पूर्णांक (15-5), 5 दशमलव)
यह भी महत्वपूर्ण है कि आपके गणना के लिए कितने दशमलव स्थानों की आवश्यकता है।
मैंने एक शेयर मूल्य एप्लिकेशन पर काम किया, जिसमें एक मिलियन शेयरों की कीमत की गणना की आवश्यकता थी। उद्धृत शेयर मूल्य को सटीकता के 7 अंकों में संग्रहीत किया जाना था।
असफ की प्रतिक्रिया
निर्भर करता है कि आपको कितना पैसा मिला ...
लग रहा है, लेकिन वास्तव में यह खतरनाक है।
केवल आज हमारे पास एक मुद्दा था जहां एक रिकॉर्ड हमारी दर तालिका में डालने में विफल रहा, क्योंकि स्तंभों में से एक (सकल) को दशमलव (11,4) पर सेट किया गया है, और हमारे उत्पाद विभाग को सिर्फ कुछ अद्भुत रिसॉर्ट में कमरों के लिए एक अनुबंध मिला है बोरा बोरा में, जो प्रति रात कई मिलियन पैसिफिक फ्रैंच के लिए बेचते हैं ... कुछ ऐसा जो कभी भी एंटीकाटेड नहीं था जब डेटाबेस स्कीमा 10 साल पहले डिज़ाइन किया गया था।
लेखांकन अनुप्रयोगों के लिए पूर्णांक के रूप में मूल्यों को संग्रहीत करना बहुत आम है (कुछ तो यहां तक कहते हैं कि यह एकमात्र तरीका है)। एक विचार प्राप्त करने के लिए, लेन-देन की राशि लें (मान लें कि $ 100.23) और एकाधिक 100, 1000, 10000, आदि द्वारा आपको सटीकता की आवश्यकता होती है। तो अगर आपको केवल सेंट को स्टोर करने की आवश्यकता है और सुरक्षित रूप से ऊपर या नीचे गोल कर सकते हैं, तो बस 100 से गुणा करें। मेरे उदाहरण में, यह स्टोर करने के लिए पूर्णांक के रूप में 10023 बना देगा। आप डेटाबेस में जगह बचाएंगे और दो पूर्णांक की तुलना दो झूलों की तुलना में बहुत आसान है। मेरी $ 0.02।
DECIMAL
? आपको हमेशा उचित समय पर डॉलर में पेन, मिल या मिलरे का अनुवाद करने के बारे में बहुत सावधान रहने की आवश्यकता होगी ।
सुपर देर से प्रवेश लेकिन GAAP अंगूठे का एक अच्छा नियम है ..
यदि आपके आवेदन को एक ट्रिलियन तक के मानों को संभालने की आवश्यकता है, तो यह काम करना चाहिए: 13,2 यदि आपको GAAP (आमतौर पर स्वीकृत लेखा सिद्धांतों) का अनुपालन करने की आवश्यकता है तो उपयोग करें: 13,4
आमतौर पर आपको आउटपुट को राउंड करने से पहले 13,4 पर अपने मनी वैल्यू को 13,2 पर समिट करना चाहिए।
स्रोत: MySQL में मौद्रिक मूल्य को संग्रहीत करने के लिए सर्वश्रेष्ठ डेटाटाइप
आप DECIMAL(19,2)
अपने सभी मौद्रिक मूल्यों के लिए डिफ़ॉल्ट रूप से कुछ का उपयोग कर सकते हैं , लेकिन यदि आप कभी भी केवल 1,000 डॉलर से कम मूल्य के स्टोर करेंगे, तो यह केवल मूल्यवान डेटाबेस स्थान की बर्बादी होगी।
अधिकांश कार्यान्वयनों के लिए, DECIMAL(N,2)
पर्याप्त होगा, जहाँ उस मान का N
कम से कम अंकों की संख्या .
सबसे बड़ी राशि है जो आप उस क्षेत्र में संग्रहीत किए जाने की अपेक्षा करते हैं + 5
। इसलिए यदि आप कभी भी 999999.99 से अधिक के किसी भी मूल्य को स्टोर करने की उम्मीद नहीं करते हैं, तो यह DECIMAL(11,2)
पर्याप्त से अधिक होना चाहिए (जब तक कि उम्मीदें बदल न जाएं)।
यदि आप जीएएपी के अनुरूप होना चाहते हैं , तो आप उस क्षेत्र में जा सकते हैं DECIMAL(N,4)
, जहां मूल्य का N
कम से कम अंकों की संख्या .
सबसे बड़ी राशि से पहले है जिसे आप उस क्षेत्र में संग्रहीत किए जाने की अपेक्षा करते हैं + 7
।
यह डेटा की प्रकृति पर निर्भर करता है। आपको पहले से इस पर चिंतन करने की आवश्यकता है।
हालाँकि MySQL आपको दशमलव (65,30) का उपयोग करने देता है, 31 पैमाने के लिए और 30 सटीकता के लिए हमारी सीमा लगती है यदि हम हस्तांतरण को खुला छोड़ना चाहते हैं।
सबसे आम RDBMS में अधिकतम पैमाने और सटीकता:
परिशुद्धता स्केल ओरेकल 31 31 टी-एसक्यूएल 38 38 MySQL 65 30 PostgreSQL 131072 16383
सितंबर 2015 जिम्बाब्वे की सरकार ने कहा कि वह 1 मिलियन अमरीकी डालर की दर से जिम्बाब्वे डॉलर का भुगतान करेगी, जो कि 1 बिलियन अमरीकी डालर से 35 बिलियन अमरीकी डॉलर प्रति 5 मिलियन डॉलर की दर पर होगा।
हम कहते हैं "हाँ, यकीन है ... मुझे उस पागल आंकड़े की आवश्यकता नहीं होगी"। खैर, जिम्बाब्वे भी ऐसा ही कहता था। बहुत पहले की बात नहीं है।
आइए कल्पना करें कि आपको ज़िम्बाब्वे डॉलर में 1 मिलियन अमरीकी डालर का लेनदेन रिकॉर्ड करने की आवश्यकता है (शायद आज की संभावना नहीं है, लेकिन कौन जानता है कि यह अब से 10 वर्षों में कैसा लगेगा?)।
- (1 mln USD) * (35 क्वाड्रिलियन ZWL) = (10 ^ 6) * (35 * 10 ^ 15) = 35 * 10 ^ 21
- ज़रुरत है:
- "35" स्टोर करने के लिए 2 अंक
- शून्य को संग्रहीत करने के लिए 21 अंक
- दशमलव बिंदु के दाईं ओर 4 अंक
- यह दशमलव (27,4) बनाता है जिसकी लागत प्रत्येक प्रविष्टि के लिए 15 बाइट्स होती है
- हम बिना किसी खर्च के बाईं ओर एक और अंक जोड़ सकते हैं - हमारे पास 15 बाइट्स के लिए दशमलव (28,4) है
- अब हम जिम्बाब्वे डॉलर में व्यक्त 10 मिलियन अमरीकी डालर के लेनदेन को स्टोर कर सकते हैं, या हिपरिनफ्लेशन की एक और हड़ताल से सुरक्षित कर सकते हैं, जो कि संभवतः होगा।