UUID अधिकतम वर्ण लंबाई


115

हम बाहर के डीबी के लिए प्राथमिक कुंजी के रूप में UUID का उपयोग कर रहे हैं, और VARCHAR के लिए एक उपयुक्त अधिकतम वर्ण लंबाई निर्धारित करने का प्रयास कर रहे हैं। जाहिरा तौर पर यह 36 अक्षर है, लेकिन हमने यूयूआईडी के निर्माण पर ध्यान दिया है जो इस से अधिक लंबा है - लंबाई में 60 अक्षर तक। किसी को भी UUID के लिए एक उपयुक्त अधिकतम चार लंबाई पता है ??


2
UUID के रूप में एक 128 बिट नंबर है, मैं वास्तव में यह देखने के लिए उत्सुक हूं कि कोडिंग क्या इसे 60 char स्ट्रिंग में बदल देगा। लगता है या तो बेहद खराब एन्कोडिंग, या कुछ अन्य, मेरे लिए अवास्तविक समस्या है।
fvu

1
आपका RDBMS क्या है? MS SQL में UUIDs के लिए एक समर्पित प्रकार है, और अन्य बस बाइट्स को स्टोर कर सकते हैं। क्या कोई कारण है कि आप इन्हें VARCHARएस के रूप में संग्रहीत करना चाहते हैं ?

@ user565869 उन्हें बाइट्स के रूप में संग्रहीत करते हुए किसी भी प्रकार के मैनुअल निरीक्षण के लिए भयानक हैं
एनरिको

जवाबों:


171

RFC4122 की धारा 3 UUID स्ट्रिंग अभ्यावेदन की औपचारिक परिभाषा प्रदान करती है। यह 36 अक्षर (32 हेक्स अंक + 4 डैश) है।

लगता है कि आपको यह पता लगाने की आवश्यकता है कि अवैध 60-चार आईडी कहां से आ रही हैं और 1 का फैसला करें) यदि आप उन्हें स्वीकार करना चाहते हैं, और 2) उन आईडी की अधिकतम लंबाई क्या हो सकती है जो कि उन्हें उत्पन्न करने के लिए एपीआई का उपयोग किया जाता है।


64

यह CHAR 36 के रूप में परिभाषित करने के लिए सही प्रकार का क्षेत्र है, वैसे, VARCHAR 36 नहीं, क्योंकि प्रत्येक मान की लंबाई समान होगी। और आप कम संग्रहण स्थान का उपयोग करेंगे, क्योंकि आपको प्रत्येक मान के लिए डेटा लंबाई संग्रहीत करने की आवश्यकता नहीं है, बस मूल्य।


9
यदि VARCHAR की तुलना में अधिक स्थान का उपयोग किया जा सकता है यदि आपका चरित्र स्तंभ पर बहु-बाइट है (देखें नीचे का भाग stackoverflow.com/a/59686/1691446 पर )
डेविड

7
बहुत यकीन है कि UUIDv4 केवल UTF-8 के लैटिन -1 चारसेट का उपयोग कर रहा है, जिस स्थिति में यह अभ्यस्त प्रभावित नहीं होगा। निश्चित रूप से जांचें कि क्या आप एक अलग चारसेट का उपयोग कर रहे हैं।
आरोन_ह

2
स्ट्रिंग प्रारूप में यूयूआईडी केवल पात्रों के इस सेट (रेगेक्स) का उपयोग कर सकता है: [0-9A-Fa-f-]जो कि एएससीआईआई में 23 अलग-अलग ओकटेट हैं।
काउबर्ट

RFC 4122 का कहना है कि यूयूआईडी 16 ऑक्टेट या 128 बिट्स हैं। यदि आप उस संग्रहण से अधिक का उपयोग कर रहे हैं, तो आप उन्हें अक्षम कर रहे हैं। उदाहरण के लिए, डैश को एन्कोड करने की आवश्यकता नहीं है। वे कोई जानकारी नहीं जोड़ते हैं।
ट्रेंटन

4
@Trenton भंडारण क्षमता और उपयोगकर्ता मित्रता के बीच एक व्यापार बंद है। अधिकतम भंडारण क्षमता के लिए यूआईआईडी को BINARY (16) के रूप में संग्रहीत किया जा सकता है, लेकिन कोई व्यक्ति जो DB की ओर देख रहा है वह विहित प्रतिनिधित्व नहीं देख सकता है, और एक प्रोग्रामिंग भाषा में केवल विहित या स्ट्रिंग प्रतिनिधित्व से एक यूयूआईडी ऑब्जेक्ट बनाने का एक साधन हो सकता है, या नहीं। एक UUID वस्तु प्रकार है; UUID को एक फ़ाइल में स्ट्रिंग रूप में संग्रहित किया जा सकता है, जिससे बाइनरी फॉर्म बोझिल हो जाता है, आदि की तुलना में
TaylanUB

7

अधिकांश डेटाबेस में इन दिनों आसान काम करने के लिए एक देशी UUID टाइप होता है। यदि आपका नहीं है, तो वे केवल 128-बिट नंबर हैं, इसलिए आप BINARY (16) का उपयोग कर सकते हैं, और यदि आपको समस्या निवारण के लिए अक्सर पाठ प्रारूप की आवश्यकता होती है, उदाहरण के लिए, तो बाइनरी कॉलम से स्वचालित रूप से उत्पन्न करने के लिए एक गणना कॉलम जोड़ें। । (बहुत बड़ा) पाठ फ़ॉर्म को संग्रहीत करने का कोई अच्छा कारण नहीं है।

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