MySQL VARCHAR अधिकतम आकार क्या है?


300

मैं जानना चाहूंगा कि MySQL VARCHAR प्रकार के लिए अधिकतम आकार क्या है।

मैंने पढ़ा कि अधिकतम आकार पंक्ति आकार द्वारा सीमित है जो लगभग 65k है। मैंने फ़ील्ड सेट करने का प्रयास किया, varchar(20000)लेकिन यह कहता है कि यह बहुत बड़ा है।

मैं इसे सेट कर सकता था varchar(10000)। सटीक अधिकतम क्या मैं इसे सेट कर सकता हूं?


1
एक विस्तार ब्लॉग: goo.gl/Hli6G3
सुरेश कामरुशी

जवाबों:


293

ध्यान रखें कि MySQL की अधिकतम पंक्ति आकार सीमा है

एक MySQL तालिका के आंतरिक प्रतिनिधित्व में 65,535 बाइट्स की अधिकतम पंक्ति आकार सीमा है, जो BLOB और TEXT प्रकारों की गिनती नहीं है। BLOB और TEXT कॉलम केवल पंक्ति आकार सीमा की ओर 9 से 12 बाइट्स का योगदान करते हैं क्योंकि उनकी सामग्री को शेष पंक्ति से अलग संग्रहीत किया जाता है। तालिका स्तंभ गणना और पंक्ति आकार पर सीमा के बारे में और पढ़ें

अधिकतम आकार एक एकल स्तंभ पर कब्जा कर सकता है, MySQL 5.0.3 के पहले और बाद में अलग है

VARCHAR कॉलम में मान चर-लंबाई के तार होते हैं। लंबाई को MySQL 5.0.3 से पहले 0 से 255 तक और 5.0.3 और बाद के संस्करणों में 0 से 65,535 तक मान के रूप में निर्दिष्ट किया जा सकता है । MySQL 5.0.3 और बाद में VARCHAR की प्रभावी अधिकतम लंबाई अधिकतम पंक्ति आकार (65,535 बाइट्स, जो सभी स्तंभों के बीच साझा की गई है) और उपयोग किए गए वर्ण सेट के अधीन है।

हालाँकि, ध्यान दें कि यदि आप utf8 या utf8mb4 जैसे मल्टी-बाइट कैरेक्टर सेट का उपयोग करते हैं तो सीमा कम है।

TEXTपंक्ति आकार सीमा को पार करने के लिए प्रकार के इनवर्टर का उपयोग करें ।

चार पाठ प्रकार TINYTEXT, TEXT, MEDIUMTEXT, और LONGTEXT हैं। ये चार BLOB प्रकारों के अनुरूप हैं और इनकी अधिकतम लंबाई और भंडारण आवश्यकताएं समान हैं।

BLOB और पाठ प्रकार पर अधिक जानकारी

और भी अधिक

डेटा प्रकार संग्रहण आवश्यकताओं पर अधिक विवरण चेक करें जो सभी डेटा प्रकारों के लिए भंडारण आवश्यकताओं से संबंधित है।


4
"लंबी" स्ट्रिंग क्या है?
रिचर्ड एच

6
मैं पाठ स्तंभों से बचने की कोशिश करता हूं, क्योंकि जब वे मौजूद और छंटाई कर सकते हैं तो टेम्‍प टेबलों का निर्माण हो सकता है
रॉबर्ट स्‍विशर

1
अगर मैं पहले नाम के लिए varchar (200) ले रहा हूँ और मैं इस क्षेत्र में केवल 6 char स्टोर कर रहा हूँ तो कितने बाइट पहले नाम पर होंगे?
परेश गामी

2
@PareshGami - 6 + 1 = 7 वर्ण! CHAR के विपरीत, VARCHAR मानों को 1-बाइट या 2-बाइट लंबाई उपसर्ग प्लस डेटा के रूप में संग्रहीत किया जाता है। और अधिक ...
rajukoyilandy

58

ऑनलाइन डॉक्स के अनुसार , 64K पंक्ति की सीमा है और आप पंक्ति आकार का उपयोग करके काम कर सकते हैं:

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)

आपको यह ध्यान रखना होगा कि कॉलम की लंबाई उनके आकार की एक-से-एक मैपिंग नहीं है। उदाहरण के लिए, CHAR(10) CHARACTER SET utf8दस वर्णों में से प्रत्येक के लिए तीन बाइट्स की आवश्यकता होती है क्योंकि उस विशेष एन्कोडिंग के लिए तीन-बाइट्स-प्रति-वर्ण गुण utf8(जो कि MySQL के utf8एन्कोडिंग के बजाय "वास्तविक" UTF-8 है, जो चार बाइट्स तक हो सकता है, के लिए खाता है। )।

लेकिन, यदि आपकी पंक्ति का आकार 64K के करीब है, तो आप अपने डेटाबेस के स्कीमा की जांच कर सकते हैं। यह एक दुर्लभ तालिका है जिसे उचित रूप से सेट अप (3NF) डेटाबेस में व्यापक होना चाहिए - यह संभव है, बस बहुत आम नहीं है।

यदि आप इससे अधिक उपयोग करना चाहते हैं, तो आप BLOBया TEXTप्रकारों का उपयोग कर सकते हैं । ये पंक्ति की 64K सीमा (एक छोटे प्रशासनिक पदचिह्न के अलावा) के खिलाफ नहीं हैं, लेकिन आपको उन अन्य समस्याओं के बारे में पता होना चाहिए जो उनके उपयोग से आती हैं, जैसे कि एक निश्चित संख्या से परे पूरे पाठ ब्लॉक का उपयोग करने में सक्षम नहीं होना। वर्णों (हालाँकि इसे ऊपर की ओर कॉन्फ़िगर किया जा सकता है), अस्थायी तालिकाओं को स्मृति के बजाय डिस्क पर होने के लिए मजबूर करता है, या क्लाइंट और सर्वर कॉम्स बफ़र्स को कुशलता से आकार को संभालने के लिए कॉन्फ़िगर करने के लिए होता है।

अनुमत आकार हैं:

TINYTEXT          255 (+1 byte  overhead)
TEXT          64K - 1 (+2 bytes overhead)
MEDIUMTEXT    16M - 1 (+3 bytes overhead)
LONGTEXT      4G  - 1 (+4 bytes overhead)

आपके पास अभी भी बाइट / कैरेक्टर मिसमैच है (ताकि कोई MEDIUMTEXT utf8कॉलम "केवल" लगभग आधे मिलियन वर्णों को संग्रहीत कर सके (16M-1)/3 = 5,592,405) , लेकिन यह अभी भी आपकी सीमा का विस्तार करता है।


4
ध्यान रखें कि TEXT प्रकार मेमोरी टेबल में संग्रहित करने में सक्षम नहीं हैं, इसलिए जब VARCHAR पर्याप्त होगा तब उनका उपयोग करने के लिए एक महत्वपूर्ण प्रदर्शन जुर्माना है।
कैमडेन एस।

MySql utf8 की 'utf8 की तीन-बाइट्स-प्रति-वर्ण गुण' , जो वास्तव में utf8 नहीं है। वास्तव में अधिकतम। बाइट्स एक utf-8 वर्ण में है 4 । इस कारण से आपको हमेशा MySQL में एन्कोडिंग सेटutf8mb4 करना चाहिए । utf8mb4MySql का नाम बाकी शब्दों को utf8 के लिए क्या कहता है।
स्टिजन डे विट

1
@StijndeWitt, इसके लिए धन्यवाद। यह इंगित करने के लिए स्पष्ट है कि मेरा मतलब यूटीएफ -8 के बजाय MySQL की utf8 एन्कोडिंग विधि है। मैं आमतौर पर "वास्तविक" UTF-8 को इंगित करने के लिए पूंजीकृत संस्करण का उपयोग करता हूं क्योंकि यह स्वीकृत IANA सम्मेलन है।
paxdiablo

41

स्रोत

एक varchar की अधिकतम लंबाई MySQL में अधिकतम पंक्ति आकार के अधीन है, जो 64KB है (BLOB की गिनती नहीं):

VARCHAR (65535) हालांकि, ध्यान दें कि यदि आप मल्टी-बाइट कैरेक्टर सेट का उपयोग करते हैं तो सीमा कम है:

VARCHAR (21844) CHARACTER SET utf8


20
कृपया CHARACTER SET utf8उदाहरणों में उपयोग करना बंद करें । यह होना चाहिए CHARACTER SET utf8mb4(यदि आप चाहते हैं कि सभी यूनिकोड पाठ को ठीक से संग्रहीत किया जाए ... और जो नहीं चाहता है?)
Stijn de Witt

4
CHARSET=utf8mb4उपयोग के लिए VARCHAR(16383)
विल् मूर III

3
Utf8mb4 का उपयोग करना आपको ऐसी स्थिति में सूचकांक की चौड़ाई की सीमा के विरुद्ध रखेगा जहां utf8 नहीं है। यदि आप utf8mb4 में शामिल वर्ण सेटों की जांच करते हैं, लेकिन utf8 में नहीं, तो आप पा सकते हैं कि हाइरोग्लिफ़िक्स के विभिन्न रूपों और ऐसे अन्य रहस्यमय चरित्र सेटों में से सभी महत्वपूर्ण प्रदर्शन जुर्माना (समान रूप से निर्धारित) के लायक नहीं हैं। यह बिल्कुल नहीं है क्योंकि कट और सूख जाता है जैसा कि स्टिजन का अर्थ है।
kcrossen

कई emojis भी utf8mb4 में मौजूद हैं और utf8 से गायब हैं, इसलिए यह समीकरण को बदल सकता है कि क्या यह सार्थक है।
ब्रायन मोरेर्टी

23

MySQL प्रलेखन से:

MySQL 5.0.3 और बाद में VARCHAR की प्रभावी अधिकतम लंबाई अधिकतम पंक्ति आकार (65,535 बाइट्स, जो सभी स्तंभों के बीच साझा की गई है) और उपयोग किए गए वर्ण सेट के अधीन है। उदाहरण के लिए, utf8 वर्णों को प्रति वर्ण तीन बाइट्स की आवश्यकता हो सकती है, इसलिए एक VARCHAR स्तंभ जो utf8 वर्ण सेट का उपयोग करता है, उसे अधिकतम 21,844 वर्णों के रूप में घोषित किया जा सकता है।

VARCHAR की सीमा उपयोग किए गए चारसेट के आधार पर भिन्न होती है। ASCII के प्रयोग से प्रति वर्ण 1 बाइट का उपयोग होता है। मतलब आप 65,535 अक्षर स्टोर कर सकते हैं। Utf8 के उपयोग से प्रति चरित्र 3 बाइट्स का उपयोग किया जाएगा जिसके परिणामस्वरूप वर्ण सीमा 21,844 होगी। लेकिन अगर आप आधुनिक मल्टीबैट चारसेट utf8mb4 का उपयोग कर रहे हैं जो आपको उपयोग करना चाहिए! यह इमोजीस और अन्य विशेष पात्रों का समर्थन करता है। यह प्रति वर्ण 4 बाइट्स का उपयोग करेगा। यह प्रति तालिका वर्णों की संख्या 16,383 तक सीमित कर देगा। ध्यान दें कि INT जैसे अन्य फ़ील्ड भी इन सीमाओं में गिने जाएंगे।

निष्कर्ष:

utf8 अधिकतम 21,844 वर्ण

utf8mb4 की अधिकतम 16,383 वर्ण


6

आप MEDIUMBLOB / LONGBLOB या MEDIUMTEXT / LONGTEXT का भी उपयोग कर सकते हैं

MySQL में एक BLOB प्रकार 65,534 बाइट्स तक संग्रहीत कर सकता है, यदि आप इस डेटा से अधिक स्टोर करने का प्रयास करते हैं तो MySQL डेटा को कम कर देगा। MEDIUMBLOB 16,777,213 बाइट्स तक स्टोर कर सकता है, और LONGBLOB 4,294,967,292 बाइट्स स्टोर कर सकता है।


3

मैसूर संस्करण 5.0.3 से पहले वरचर डेटेटाइप 255 वर्णों को संग्रहीत कर सकता है, लेकिन 5.0.3 से यह 65,535 वर्णों को संग्रहीत कर सकता है।

लेकिन यह 65,535 बाइट्स की अधिकतम पंक्ति आकार की सीमा है। इसका मतलब है कि सभी कॉलमों में यह 65,535 बाइट्स से अधिक नहीं होना चाहिए।

आपके मामले में यह संभव हो सकता है कि जब आप 10000 से अधिक सेट करने का प्रयास कर रहे हों तो यह 65,535 से अधिक हो और mysql त्रुटि देगा।

अधिक जानकारी के लिए: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

उदाहरण के साथ ब्लॉग: http://goo.gl/Hli6G3


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