উভয় ফাংশনই স্ট্রিং ফাংশন এবং স্ট্রিং-এ উপস্থিত অক্ষরের সংখ্যা প্রদান করে। কিন্তু তারা এই ধারণার মধ্যে ভিন্ন যে 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)