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