কম্পিউটার টিউটোরিয়াল

MySQL LENGTH() এবং CHAR_LENGTH() ফাংশনের পার্থক্য কী?


দুই ফাংশনই স্ট্রিং ফাংশন এবং স্ট্রিং-এ উপস্থিত ক্যারেক্টার সংখ্যা ফেরত দেয়। কিন্তু তারা এই ধারণায় ভিন্ন যে CHAR_LENGTH() ফাংশন স্ট্রিং দৈর্ঘ্য 'ক্যারেক্টার'-এ মাপে, অন্যদিকে LENGTH() ফাংশন স্ট্রিং দৈর্ঘ্য 'বাইট'-এ মাপে। অন্য কথায়, CHAR_LENGTH() ফাংশন মাল্টি-বাইট সেফ অর্থাৎ এটি উপেক্ষা করে যে ক্যারেক্টারগুলো একক-বাইট নাকি মাল্টি-বাইট। উদাহরণস্বরূপ, যদি একটি স্ট্রিং চারটি ২-বাইট ক্যারেক্টার ধারণ করে তবে LENGTH() ফাংশন ৮ ফেরত দেবে, কিন্তু CHAR_LENGTH() ফাংশন ৪ ফেরত দেবে। এই অর্থে, CHAR_LENGTH() LENGTH() ফাংশন চেয়ে বেশি নির্ভুল ফলাফল দেয়।

পার্থক্যটি বিশেষভাবে ইউনিকোডের জন্য প্রাসঙ্গিক, যেখানে অধিকাংশ ক্যারেক্টার দুই বাইটে এনকোডেড থাকে বা UTF-8-র জন্য যেখানে বাইটের সংখ্যা পরিবর্তনশীল। নিচের উদাহরণে এটি প্রদর্শন করা হলো −

উদাহরণ

নিচের উদাহরণে, প্রথমে 'Gaurav' স্ট্রিংকে ucs2 অর্থাৎ ইউনিকোড এবং ২-বাইট ক্যারেক্টার ধারণকারী ক্যারেক্টার সেটে রূপান্তর করা হয়েছে। তারপর রেজাল্ট সেট থেকে পার্থক্য দেখা যাচ্ছে অর্থাৎ 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)

  1. MySQL-এ INT এবং INTEGER ডেটা টাইপের পার্থক্য

  2. MySQL-এ AND এবং && অপারেটরের পার্থক্য কি? (স্ট্যান্ডার্ড vs মালিকানা সিনট্যাক্স)

  3. MySQL-এ TINYINT(1) এবং Boolean-এর পার্থক্য

  4. MySQL-এ != NULL এবং IS NOT NULL-এর পার্থক্য