SQL सर्वर अहस्ताक्षरित डेटाटाइप का समर्थन क्यों नहीं करता है?


84

मैं विशेष रूप से अहस्ताक्षरित के बारे में सोच रहा हूं int

यहाँ एक व्यावहारिक उदाहरण है: जब आपका पहचान स्तंभ अधिकतम हो जाता है तो आप क्या करते हैं? या तो जाना संभव है BigInt(4 के बजाय 8 बाइट्स भंडारण) या नकारात्मक पूर्णांकों का समर्थन करने के लिए आवेदन को फिर से भरना, और यहां तक ​​कि इस उत्तर में संकेत के रूप में अपने स्वयं के नियम बनाने के लिए ; उन विकल्पों में से कोई भी इष्टतम नहीं है।

UInt एक आदर्श समाधान होगा, लेकिन SQL सर्वर इसे प्रदान नहीं करता है (जहां MySQL करता है)।

मैं समझता हूं कि अहस्ताक्षरित डेटाटिप्स SQL ​​मानक (SQL-2003) का हिस्सा नहीं हैं, लेकिन फिर भी मुझे एक बेकार लगता है।

इन (SQL सर्वर में या मानक में) शामिल न करने का क्या कारण है?


11
SQL सर्वर डिज़ाइन टीम से पूछें ..... यह भी: क्या आप वास्तव में 2 बिलियन INT IDENTITY मूल्यों को अधिकतम करने जा रहे हैं ?? वास्तव में?!?!?! यदि आपके पास जो कुछ भी आप के साथ काम कर रहे हैं, उसकी 2 बिलियन से अधिक पंक्तियाँ हैं, तो मुझे यकीन है कि आप कुछ डिस्क स्थान को अलग कर सकते हैं और पहचान के रूप में एक बड़ी संख्या का उपयोग कर सकते हैं ....
marc_s

6
तुम्हारा क्या मतलब है marc_s? यह केवल 50 साल के लिए प्रत्येक 800ms सीधे एक सम्मिलित है, आपकी तालिकाओं में उस तरह की गतिविधि नहीं है? :)
माइक एम।

22
@ माइक एम: हम सभी मिकी माउस ऐप पर काम नहीं करते हैं ... हमने 2 साल से कम समय में 3 बिलियन + प्रति बीघा का उपयोग किया है। पीक है> प्रति सेकंड 2000 पंक्तियाँ।
gbn

5
@ लेकिन मेरा मतलब यह नहीं था कि किसी के पास वह भार नहीं था। हालाँकि, जैसा कि कहा गया है, यदि आपके पास प्रति सेकंड> 2000 पंक्तियाँ हैं, तो अतिरिक्त 2B आपके कारण की मदद नहीं करेगा।
माइक एम।

11
@ माइक M और @marc_s, यदि मैं 2 बिलियन रो टेबल के साथ एक सिस्टम पर काम कर रहा था, तो मैं व्यर्थ भंडारण पर ध्यान दे सकता हूं। मैं इंडेक्स पेज के आकार और इंडेक्स स्कैन के प्रदर्शन पर ध्यान दे सकता हूं। ऐसी स्थितियों में, मैं अंतरिक्ष को बर्बाद नहीं करना चाहूंगा।
रोमिेन

जवाबों:


65

अगर मुझे अनुमान लगाना था, तो मैं कहूंगा कि वे एक प्रकार के प्रसार से बचने की कोशिश कर रहे हैं। आम तौर पर बोलना कुछ भी नहीं है कि एक अहस्ताक्षरित पूर्णांक वह कर सकता है जो एक हस्ताक्षरित पूर्णांक नहीं कर सकता। मामले के लिए जब आपको 2147483648 और 4294967296 के बीच एक नंबर की आवश्यकता होती है, तो आपको संभवतः 8 बाइट पूर्णांक में जाना चाहिए क्योंकि संख्या भी अंततः 4294967296 से अधिक होगी।


3
मुझे लगता है कि यह निकटतम है जो हम इस प्रश्न के उत्तर के लिए प्राप्त कर सकते हैं। धन्यवाद।
रोमिंह

8
यदि 'प्रकारों का प्रसार' कुछ स्थान / धन बचा सकता है, तो आपको क्यों लगता है कि यह बुराई हो सकती है।
शमूएल

1
उनके मान से पंक्तियाँ लाना भी धीमा होगा (अर्थात ORDER BY ABS(Id)), खासकर अगर स्तंभ एक क्लस्टर प्राथमिक कुंजी है। उदाहरण के लिए, 32-बिट यूनिक्स टाइमस्टैम्प का उपयोग करना अक्सर एक मानक SQL डेटाइम से 4 बाइट्स दाढ़ी बनाने का एक आसान तरीका है।
ग्रू ऑक्ट

56

उस उद्देश्य के लिए आप बीज मूल्य के रूप में -2,147,483,648 का उपयोग कर सकते हैं।

Identity(-2147483648, 1)

हा मैं इस जवाब से बिल्कुल प्यार करता हूं। मुझे यकीन नहीं है कि मैं इसे कभी भी लागू करूंगा, लेकिन यह निश्चित रूप से आपकी आईडी का इस्तेमाल नहीं होने के आधे मामले को हल करता है।
केविन

46

मुझे Microsoft Office Dev Center पर एक समान प्रश्न मिला

जिम हॉग (प्रोग्राम मैनेजर) के जवाब में कुछ प्रो और कोन के अहस्ताक्षरित इंट को जोड़ने के लिए है। प्रमुख चोर निहित अधिकार रूपांतरणों को लागू करने के नियम हैं जो सही होने के लिए दुःस्वप्न बन जाते हैं।

अनुरोध को "W't Fix" के रूप में बंद किया गया था।


लिंक अब काम नहीं कर रहा है, इसलिए मैं मूल उत्तर नहीं पढ़ सकता। लेकिन मेरा मानना ​​है कि समस्या यह नहीं है कि यह एक बुरा सपना है; यह है कि कोई मानक नहीं है जो कहता है कि यह कैसे करना है। वे कर सकते हैं उदाहरण के लिए MySQL क्या करता है (मुझे नहीं लगता कि अन्य DBMSs UNSIGNED का समर्थन करते हैं), लेकिन यदि कोई अन्य DBMS संकेतों के लिए समर्थन जोड़ता है, तो वे विभिन्न नियमों का उपयोग कर सकते हैं। रूपांतरण डिजाइन एक महत्वपूर्ण मामला है। जब यह गंभीरता से नहीं लिया जाता है तो जावास्क्रिप्ट इसका एक उदाहरण है।
फेडेरिको रेज़ोली

अपडेटेड लिंक - MSSN ऑफिस डेवलपर्स फोरम पर जिम हॉग की टिप्पणी।
एंथनी के

1

वे SIGNED और UNSIGNED कीवर्ड का समर्थन नहीं करते क्योंकि वे मानक नहीं हैं। SQL मानक में, सभी संख्यात्मक प्रकार हस्ताक्षरित हैं।

UNSIGNED (और SIGNED, जो डिफ़ॉल्ट है) MySQL एक्सटेंशन हैं जो बाइट्स की समान मात्रा में उच्च अहस्ताक्षरित संख्याओं को संग्रहीत करने के लिए उपयोगी हो सकते हैं, और नकारात्मक संख्याओं को अस्वीकार कर सकते हैं।

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