एक वर्चर की अधिकतम लंबाई MySQL में अधिकतम पंक्ति आकार के अधीन है, जो 64KB है (बीएलओबी की गिनती नहीं):
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)