আসলে VARCHAR ডেটা টাইপ ভেরিয়েবল-দৈর্ঘ্যের অক্ষর ডেটা একক বাইট এবং মাল্টিবাইট অক্ষরের সিনট্যাক্সে সংরক্ষণ করে এই ডেটা টাইপের জন্য VARCHAR(n), যেখানে n অক্ষরের সর্বাধিক সংখ্যা এবং এটি অবশ্যই হতে হবে টেবিল তৈরি করার সময় নির্দিষ্ট করা হয়েছে। MySQL 5.03-এর আগে n-এর মান 0 থেকে 255-এর মধ্যে হতে পারে কিন্তু MySQL 5.03-এ এবং পরে মান 0 থেকে 65,535-এর মধ্যে হতে পারে৷
VARCHAR-এ সংরক্ষিত অক্ষরের সর্বাধিক সংখ্যা নির্ভর করে সর্বাধিক সারি আকার এবং ব্যবহৃত অক্ষর সেটের উপর৷ যদি আমরা ASCII অক্ষর সেট ব্যবহার করি তবে এটি 65,535 অক্ষর সংরক্ষণ করতে পারে কারণ ASCII প্রতি অক্ষর 1 বাইট ব্যবহার করবে। অন্যদিকে, আমরা যদি utf8 অক্ষর সেট ব্যবহার করি তাহলে অক্ষর সীমা 21,844 হবে কারণ utf8 অক্ষর প্রতি 3 বাইট ব্যবহার করবে। সর্বাধিক সারির আকার সীমা হল 65,535 বাইট যার মানে হল সমস্ত কলাম সহ এটি 65,535 বাইটের বেশি হওয়া উচিত নয়৷
উদাহরণ
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(দৈর্ঘ্য সংরক্ষণের জন্য প্রতিটি কলামে 2 বাইট ব্যবহার করা হয়)।
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
এখন, দৈর্ঘ্য 1 বাইট বাড়ালে MySQL উপরের ক্যোয়ারীতে দেখানো একটি ত্রুটি প্রদান করে।