উভয় ফাংশনই স্ট্রিং ফাংশন এবং স্ট্রিং-এ উপস্থিত অক্ষরের সংখ্যা প্রদান করে। কিন্তু তারা এই ধারণার মধ্যে ভিন্ন যে CHAR_LENGTH() ফাংশন 'অক্ষর'-এ স্ট্রিং দৈর্ঘ্য পরিমাপ করে যেখানে LENGTH() ফাংশন 'বাইটে' স্ট্রিং দৈর্ঘ্য পরিমাপ করে। অন্য কথায়, আমরা বলতে পারি যে CHAR_LENGTH() ফাংশনটি মাল্টি-বাইট নিরাপদ অর্থাৎ এটি অক্ষরগুলি একক-বাইট বা মাল্টি-বাইট কিনা তা উপেক্ষা করে। উদাহরণস্বরূপ, যদি একটি স্ট্রিংয়ে চারটি 2-বাইট অক্ষর থাকে তাহলে LENGTH().
ফাংশনটি 8 প্রদান করবে, যেখানে CHAR_LENGTH() ফাংশন 4 প্রদান করবে৷ এই অর্থে, আমরা বলতে পারি যে CHAR_LENGTH() LENGTH() ফাংশনের চেয়ে সুনির্দিষ্ট ফলাফল দেয়৷
পার্থক্যটি ইউনিকোডের জন্য বিশেষভাবে প্রাসঙ্গিক, যেখানে বেশিরভাগ অক্ষর দুটি বাইটে এনকোড করা হয় বা UTF-8 এর জন্য প্রাসঙ্গিক যেখানে বাইটের সংখ্যা পরিবর্তিত হয়। এটি নীচের উদাহরণে প্রদর্শিত হয় -
উদাহরণ
নীচের এই উদাহরণে, প্রথমত, 'গৌরব' স্ট্রিংটি ucs2-এ রূপান্তরিত হয়েছে , এটি ইউনিকোড এবং 2-বাইট অক্ষর, অক্ষর সেট ধারণ করে। তারপরে আমরা ফলাফল সেট থেকে পার্থক্যটি পর্যবেক্ষণ করতে পারি যেমন LENGTH() দৈর্ঘ্য অনেক বাইটে দেয় এবং CHAR_LENGTH() অনেকগুলি অক্ষরে দৈর্ঘ্য দেয়৷
mysql> SET @A = CONVERT('Gaurav' USING ucs2); Query OK, 0 rows affected (0.15 sec) mysql> Select Char_length(@A), LENGTH(@A); +-----------------+------------+ | Char_length(@A) | LENGTH(@A) | +-----------------+------------+ | 6 | 12 | +-----------------+------------+ 1 row in set (0.03 sec)
এবং এখন, নীচের উদাহরণে, আমরা UTF-8-এ একটি বিশেষ অক্ষর ব্যবহার করছি , বাইট একটি সংখ্যা পরিবর্তিত, অক্ষর সেট. তারপর আমরা ফলাফল সেট থেকে পার্থক্য পর্যবেক্ষণ করতে পারি।
mysql> SET @B = CONVERT('©' USING utf8); Query OK, 0 rows affected (0.15 sec) mysql> Select CHAR_LENGTH(@B); +-----------------------+ | CHAR_LENGTH(@B) | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec) mysql> Select LENGTH(@B); +---------------+ | LENGTH(@B) | +---------------+ | 2 | +---------------+ 1 row in set (0.00 sec)