दोनों फंक्शन स्ट्रिंग फंक्शन हैं और स्ट्रिंग में मौजूद कैरेक्टर की संख्या लौटाते हैं। लेकिन वे इस अवधारणा में भिन्न हैं कि CHAR_LENGTH() फंक्शन स्ट्रिंग लंबाई को 'कैरेक्टर' में मापता है जबकि LENGTH() फंक्शन स्ट्रिंग लंबाई को 'बाइट्स' में मापता है। दूसरे शब्दों में, हम कह सकते हैं कि CHAR_LENGTH() फंक्शन मल्टी-बाइट सुरक्षित है यानी यह इस बात को नजरअंदाज करता है कि कैरेक्टर सिंगल-बाइट हैं या मल्टी-बाइट। उदाहरण के लिए, यदि एक स्ट्रिंग में चार 2-बाइट कैरेक्टर हैं तो LENGTH() फंक्शन 8 लौटाएगा, जबकि CHAR_LENGTH() फंक्शन 4 लौटाएगा। इस अर्थ में, हम कह सकते हैं कि CHAR_LENGTH() LENGTH() फंक्शन की तुलना में अधिक सटीक परिणाम देता है।
यह अंतर विशेष रूप से यूनिकोड के लिए प्रासंगिक है, जिसमें अधिकांश कैरेक्टर दो बाइट्स में एन्कोडेड होते हैं या UTF-8 के लिए जहां बाइट्स की संख्या भिन्न होती है। यह नीचे दिए गए उदाहरण में प्रदर्शित है:
उदाहरण
इस उदाहरण में, सबसे पहले स्ट्रिंग 'Gaurav' को 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)