2011-08-22 11 views
9

लगता है जैसे BIGINT MySQL पर उपलब्ध सबसे बड़ा पूर्णांक है, है ना?जब आपको mysql पर 20 अंकों से अधिक पूर्णांक की आवश्यकता होती है तो क्या करें?

उदाहरण के लिए आपको एक बिगिनट (80) स्टोर करने की आवश्यकता होने पर क्या करना है?

कुछ मामलों में, जैसे कि ट्विटर एपीआई दस्तावेज़ों में कहीं भी, वे हमें इन बड़े पूर्णांक को varchar के रूप में स्टोर करने की सलाह देते हैं?

एक प्रकार या किसी अन्य का उपयोग करने की पसंद के पीछे वास्तविक कारण कौन सा है?

+0

बिगिनट परिभाषा द्वारा 8 बाइट तक सीमित है। – mozillanerd

उत्तर

18

बिग इंटीजर वास्तव में 20 अंकों तक सीमित नहीं हैं, वे 64 बिट्स में व्यक्त किए जा सकने वाले नंबर तक सीमित हैं (उदाहरण के लिए, संख्या 99,999,999,999,999,999,999 20 अंकों लंबी होने के बावजूद वैध पूर्ण पूर्णांक नहीं है)।

आपके पास यह सीमा है कि देशी स्वरूप पूर्णांक को अंतर्निहित हार्डवेयर द्वारा अपेक्षाकृत तेज़ तरीके से छेड़छाड़ की जा सकती है जबकि एक समय के टेक्स्ट संस्करण (टेंड) को एक समय में एक अंक संसाधित करने की आवश्यकता होती है।

आप चाहते हैं सबसे बड़ा 64-बिट अहस्ताक्षरित पूर्णांक 18,446,744,073,709,551,615 से एक नंबर बड़ा है तो आप एक varchar (या अन्य शाब्दिक क्षेत्र) के रूप में यह स्टोर करने के लिए की जरूरत है और उम्मीद है कि आप इस पर ज्यादा गणितीय हेरफेर करने की ज़रूरत नहीं है ।

वैकल्पिक रूप से, आप फ्लोटिंग पॉइंट नंबरों को देख सकते हैं जिनमें एक बड़ी रेंज है लेकिन कम परिशुद्धता, या दशमलव संख्या जो आपको 1212 अंकों को एक अभिन्न मान के लिए decimal(65,0) कॉलम प्रकार के रूप में देने में सक्षम होना चाहिए।

+0

'ऑर्डर' और 'WHERE' कथन' के लिए सबसे अच्छा कौन सा है? (ठीक से सुलझाए गए इंडेक्स के साथ)। उदाहरण के लिए 'टेबल से चुनें स्तंभ 1 जहां Mybigint> एन आदेश दिनांक दिनांक 100000'। इस मामले में, परिणामों को अंकन करने के लिए प्रयोग किया जाता है। –

+0

@ केयने, दशमलव मान उसके लिए ठीक काम करेंगे लेकिन शायद कच्चे अभिन्न प्रकारों से धीमे होंगे। गति का पदानुक्रम शायद विभिन्न कच्चे इंटीग्रल, दशमलव, शून्य-उचित वर्चर्स और अनुचित वर्चर्स (सबसे तेज़ करने के लिए सबसे तेज़) होंगे, लेकिन आपको नेट पर कुछ योबो की सलाह पर भरोसा नहीं करना चाहिए, यहां तक ​​कि मुझे भी :-) मापें, डॉन ' टी अनुमान लगाओ। फिर सबसे तेज़ी से उपयोग करें जो आपको आवश्यक सीमा प्रदान करता है। विशेष रूप से, यदि आपको 80 अंकों की आवश्यकता है, तो उचित वर्चर्स का उपयोग करें (ताकि 42 को 0000000000 ... 000000042' के रूप में संग्रहीत किया जा सके)। ... – paxdiablo

+0

... 25 अंकों के लिए, शायद दशमलव (25,0)। 1 9 अंकों के लिए, बड़ा। और इसी तरह। आपकी स्कीमा हमेशा के लिए बंद नहीं है।यदि, किसी बिंदु पर, आपको 1 9 से 25 अंकों तक स्थानांतरित करने की आवश्यकता है, तो आप उस बिंदु पर परिवर्तन को बिगिन से दशमलव तक बदल सकते हैं, अन्यथा YAGNI सिद्धांत शायद लागू होता है। – paxdiablo

3

आप numeric(65,0) निर्दिष्ट कर सकते हैं, लेकिन यदि आपको बड़ा होने की आवश्यकता है, तो आपको एक वर्चर की आवश्यकता होगी।

एक दूसरे का चयन करने का कारण उपयोग, दक्षता और स्थान है। एक int का उपयोग करना एक बड़ा से अधिक कुशल है या, मुझे विश्वास है, संख्यात्मक यदि आपको उस पर गणित करने की आवश्यकता है।

2

यदि आप अधिकतम स्टोरेज दक्षता चाहते हैं तो आप उस बड़े पूर्णांक को an arbitrary binary string के रूप में स्टोर कर सकते हैं।

लेकिन मुझे यकीन नहीं है कि यह इसके लायक है क्योंकि आपको अपने आवेदन में 64 बिट पूर्णांक से भी निपटना होगा, जो एक मजबूत कारण के बिना भी not the thing you want to do है।

बेहतर चीजों को सरल रखें और varchar का उपयोग करें।

-4

बिगिनट परिभाषा द्वारा 8 अंकों तक सीमित है। डेसिमल प्रकार में अंकों की अधिकतम संख्या 64 है। आपको बड़े परिशुद्धता के मूल्यों को संग्रहीत करने के लिए VARCHAR का उपयोग करना चाहिए और इस बात से अवगत रहें कि ऐसे मानों का कोई प्रत्यक्ष गणित नहीं है।

+4

बाइट, अंक नहीं। – yan

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