MySQL में varchar (max) के बराबर क्या है?
MySQL में varchar (max) के बराबर क्या है?
जवाबों:
एक 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)
DEFAULT
कॉलम के लिए कोई मूल्य घोषित नहीं करना चाहते । TEXT या BLOB प्रकारों के साथ ऐसा नहीं कर सकते।
TEXT
लंबाई सीमा 64K है। MEDIUMTEXT
लंबाई सीमा 16M है। LONGTEXT
लंबाई सीमा 4 जी है।
varchar(max)
कॉलम प्रकार पर लागू नहीं होती है ।
TLDR; MySql की समकक्ष अवधारणा नहीं है varchar(max)
, यह एक MS SQL सर्वर सुविधा है।
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
और स्तंभ प्रकार अन्य सभी कॉलम प्रकार के रूप में एक ही क्वेरी अर्थ विज्ञान का समर्थन करता है।BLOB
varchar(max)
तो varchar(MAX)
वास्तव में मतलब है varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
और नहीं varchar(MAX_SIZE_OF_A_COLUMN)
।
varchar(max)
MySql में स्टोरेज की समान मात्रा प्राप्त करने के लिए आपको अभी भी एक BLOB
कॉलम प्रकार का सहारा लेना होगा । यह लेख MySql में बड़ी मात्रा में डेटा को कुशलतापूर्वक संग्रहीत करने के एक बहुत प्रभावी तरीके पर चर्चा करता है।
varchar(max)
वास्तव में मतलब है।
एक चरचर की अधिकतम लंबाई है
65535
चरित्र सेट में एक चरित्र की अधिकतम बाइट लंबाई द्वारा विभाजित स्तंभ सेट है (उदाहरण के लिए utf8 = 3 बाइट्स, ucs2 = 2, latin1 = 1)।
लंबाई को संग्रहीत करने के लिए माइनस 2 बाइट्स
अन्य सभी स्तंभों की लंबाई माइनस
शून्य से प्रत्येक 8 स्तंभों के लिए 1 बाइट। यदि आपका कॉलम शून्य है / शून्य नहीं है, तो इसे एक बाइट / बाइट्स में एक बिट के रूप में संग्रहीत किया जाता है जिसे नल मास्क कहा जाता है, प्रति कॉलम 1 बिट जो कि अशक्त है।
परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code VARCHAR (अधिकतम);
परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code longtext;
परिवर्तन तालिका prg_ar_report_colors जोड़ने के लिए Text_Color_Code CLOB;
जब सीमा आकार के तहत 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>