আসলে VARCHAR ডেটা টাইপ একক বাইট এবং মাল্টিবাইট ক্যারেক্টারে ভেরিয়েবল-দৈর্ঘ্যের ক্যারেক্টার ডেটা সংরক্ষণ করে। এর সিনট্যাক্স VARCHAR(n), যেখানে n হল সর্বোচ্চ ক্যারেক্টার সংখ্যা এবং টেবিল তৈরি করার সময় এটি নির্দিষ্ট করতে হয়। MySQL 5.03 এর আগে n-এর মান ০ থেকে ২৫৫ পর্যন্ত হতে পারত, কিন্তু MySQL 5.03 এবং তার পর থেকে মান ০ থেকে ৬৫,৫৩৫ পর্যন্ত হতে পারে।
VARCHAR-এ সংরক্ষণযোগ্য সর্বোচ্চ ক্যারেক্টার সংখ্যা সর্বোচ্চ সারি আকার এবং ব্যবহৃত ক্যারেক্টার সেটের ওপর নির্ভর করে। ASCII ক্যারেক্টার সেট ব্যবহার করলে ৬৫,৫৩৫ ক্যারেক্টার সংরক্ষণ করা যায় কারণ ASCII প্রতি ক্যারেক্টারে ১ বাইট ব্যবহার করে। অন্যদিকে, utf8 ক্যারেক্টার সেট ব্যবহার করলে ক্যারেক্টার সীমা ২১,৮৪৪ হবে কারণ utf8 প্রতি ক্যারেক্টারে ৩ বাইট ব্যবহার করে। সর্বোচ্চ সারি আকারের সীমা ৬৫,৫৩৫ বাইট অর্থাৎ সব কলাম মিলিয়ে ৬৫,৫৩৫ বাইটের চেয়ে বেশি হতে পারবে না।
উদাহরণ
mysql> Create Table var_test(FName Varchar(32765) NOT NULL, LName Varchar(32766) NOT NULL); Query OK, 0 rows affected (0.25 sec)
উপরোক্ত কোয়ারিটি দুটি কলাম সহ একটি টেবিল তৈরি করেছে, FName Varchar(32765) এবং LName Varchar(32766)। অতএব মোট দৈর্ঘ্য হবে 32765+2+32766+2=65535 (প্রতি কলামের দৈর্ঘ্য সংরক্ষণের জন্য ২ বাইট ব্যবহার হয়)।
mysql> Create Table var_test1(FName varchar(32766) NOT NULL, LName Varchar(32766) NOT NULL); ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
এখন, দৈর্ঘ্য ১ বাইট বাড়ালে MySQL উপরের কোয়ারিটিতে দেখা অনুযায়ী এরর ফেরত দেয়।