MySQL में varchar (max) के बराबर?


जवाबों:


195

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

VARCHAR(65535)

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

VARCHAR(21844) CHARACTER SET utf8

यहाँ कुछ उदाहरण हैं:

अधिकतम पंक्ति का आकार 65535 है, लेकिन एक विचर में एक बाइट या दो भी शामिल है, जो किसी दिए गए स्ट्रिंग की लंबाई को सांकेतिक शब्दों में बदलना है। तो आप वास्तव में अधिकतम पंक्ति आकार के एक प्रकार की घोषणा नहीं कर सकते, भले ही यह तालिका का एकमात्र स्तंभ हो।

mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

लेकिन अगर हम लंबाई कम करने की कोशिश करते हैं, तो हम सबसे बड़ी लंबाई पाते हैं जो काम करता है:

mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)

अब यदि हम टेबल स्तर पर मल्टीबाइट चार्टसेट का उपयोग करने का प्रयास करते हैं, तो हम पाते हैं कि यह प्रत्येक चरित्र को कई बाइट्स के रूप में गिना जाता है। UTF8 तार आवश्यक रूप से प्रति स्ट्रिंग एकाधिक बाइट्स का उपयोग नहीं करते हैं , लेकिन MySQL यह नहीं मान सकता है कि आप अपने भविष्य के सभी आवेषणों को सिंगल-बाइट वर्णों तक सीमित रखेंगे।

mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead

आखिरी त्रुटि हमें क्या बताती है, इसके बावजूद, InnoDB अभी भी 21845 की लंबाई पसंद नहीं करता है।

mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

यह एकदम सही समझ में आता है, अगर आप उस 21845 * 3 = 65535 की गणना करते हैं, जो वैसे भी काम नहीं करेगा। जबकि 21844 * 3 = 65532, जो काम करता है।

mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)

20
मैं
Adi

2
@ AdnanShammout: निश्चित रूप से, जब तक आप DEFAULTकॉलम के लिए कोई मूल्य घोषित नहीं करना चाहते । TEXT या BLOB प्रकारों के साथ ऐसा नहीं कर सकते।
बिल कारविन

5
@DanW, TEXTलंबाई सीमा 64K है। MEDIUMTEXTलंबाई सीमा 16M है। LONGTEXTलंबाई सीमा 4 जी है।
बिल करविन

4
इसके साथ सबसे बड़ी समस्या यह है कि यदि आप उस आकार का एक कॉलम बनाते हैं, तो आपके टेबल में केवल वही एक कॉलम हो सकता है। मैक्स MySql में पंक्ति आकार 64k है, इसलिए यदि आप एक 64k स्तंभ है, तुम सब मिलता है कि। यही बाधा Sql सर्वर के varchar(max)कॉलम प्रकार पर लागू नहीं होती है ।
जोशरीफ

1
@joshperry, हाँ, लेकिन TEXT / BLOB कॉलम केवल 64KB पंक्ति आकार सीमा की ओर एक छोटी राशि (9-12 बाइट्स) की गणना करते हैं, इसलिए यदि आपको एक बड़े VARCHAR के साथ-साथ कई अन्य स्तंभों की आवश्यकता है, तो TEXT का उपयोग करना बेहतर है।
बिल कारविन

74

TLDR; MySql की समकक्ष अवधारणा नहीं है varchar(max), यह एक MS SQL सर्वर सुविधा है।

VARCHAR (अधिकतम) क्या है?

varchar(max) Microsoft SQL सर्वर की एक विशेषता है।

2005 के संस्करण से पहले Microsoft SQL सर्वर संस्करणों में एक कॉलम को संग्रहीत करने वाले डेटा की मात्रा 8KB तक सीमित थी। 8KB से अधिक स्टोर करने के लिए TEXT, आपको NTEXTया BLOBस्तंभ प्रकारों का उपयोग करना होगा , ये कॉलम प्रकार तालिका डेटा पृष्ठों से अलग 8K पृष्ठों के संग्रह के रूप में अपने डेटा को संग्रहीत करते हैं; उन्होंने प्रति पंक्ति 2GB तक भंडारण का समर्थन किया।

इन स्तंभ प्रकारों के लिए बड़ा चेतावनी यह थी कि उन्हें आमतौर पर डेटा का उपयोग करने और संशोधित करने के लिए विशेष कार्यों और बयानों की आवश्यकता होती थी (उदाहरण READTEXTके लिए WRITETEXT, और UPDATETEXT)

SQL सर्वर 2005 में, varchar(max)डेटा और डेटा को एक साथ लाने के लिए और बड़े स्तंभों को संशोधित करने के लिए उपयोग किए गए प्रश्नों को एकजुट करने के लिए पेश किया गया था। के लिए डेटा varchar(max)कॉलम तालिका डेटा पृष्ठों के साथ इनलाइन संग्रहित है।

जैसे कि MAX कॉलम में डेटा 8KB डेटा पेज भरता है, एक ओवरफ्लो पेज आवंटित किया जाता है और पिछला पेज इसे लिंक की गई सूची बनाता है। विपरीत TEXT, NTEXTऔर स्तंभ प्रकार अन्य सभी कॉलम प्रकार के रूप में एक ही क्वेरी अर्थ विज्ञान का समर्थन करता है।BLOBvarchar(max)

तो varchar(MAX)वास्तव में मतलब है varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)और नहीं varchar(MAX_SIZE_OF_A_COLUMN)

MySql में एक मुहावरा नहीं है।

varchar(max)MySql में स्टोरेज की समान मात्रा प्राप्त करने के लिए आपको अभी भी एक BLOBकॉलम प्रकार का सहारा लेना होगा । यह लेख MySql में बड़ी मात्रा में डेटा को कुशलतापूर्वक संग्रहीत करने के एक बहुत प्रभावी तरीके पर चर्चा करता है।


1
यह SQL सर्वर के साथ MySQL की तुलना में अधिक है।
Kermit

14
@njk हाँ, पर आदेश की व्याख्या करने के क्या "बराबर" MySql में (या इस मामले में बराबर की कमी) वास्तव में क्या वर्णन करने की आवश्यकता में varchar(max) वास्तव में मतलब है।
जोशरीरी

29

एक चरचर की अधिकतम लंबाई है

65535

चरित्र सेट में एक चरित्र की अधिकतम बाइट लंबाई द्वारा विभाजित स्तंभ सेट है (उदाहरण के लिए utf8 = 3 बाइट्स, ucs2 = 2, latin1 = 1)।

लंबाई को संग्रहीत करने के लिए माइनस 2 बाइट्स

अन्य सभी स्तंभों की लंबाई माइनस

शून्य से प्रत्येक 8 स्तंभों के लिए 1 बाइट। यदि आपका कॉलम शून्य है / शून्य नहीं है, तो इसे एक बाइट / बाइट्स में एक बिट के रूप में संग्रहीत किया जाता है जिसे नल मास्क कहा जाता है, प्रति कॉलम 1 बिट जो कि अशक्त है।


मुझे आपके उत्तर का प्रारूप पसंद है लेकिन यह कुछ उपयोगी जानकारी याद आ रही है जो शीर्ष उत्तर चारसेट्स और सामान के बारे में प्रदान करता है
जो फिलिप्स

3

Sql सर्वर के लिए

परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code VARCHAR (अधिकतम);

MySql के लिए

परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code longtext;

Oracle के लिए

परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code CLOB;


1
ध्यान दें कि longtext, text और blob को varchar की तुलना में अलग तरह से स्टोर किया जाता है। varchar को अन्य फ़ील्ड्स के साथ संग्रहित किया जाता है, जबकि टेक्स्ट को सर्वर में एक अलग फाइल पर संग्रहित किया जाता है। यह पेशेवरों और विपक्ष इतना सावधान है जो एक का चयन करने के लिए
santiago arizti

0

जब सीमा आकार के तहत VARCHAR से लेकर तक टकराने वाला माईक्कल कॉलम !!!

mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Note  | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

-11

MySQL 5.6.12 में एक varchar की अधिकतम लंबाई 4294967295 है।

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