DEV Community

Md.Shariful Islam
Md.Shariful Islam

Posted on

ডাটাবেজে Collation কেন প্রয়োজন ?

কোলেশন হলো MySQL-এ একটি নিয়মের সেট যা নির্ধারণ করে কিভাবে ডেটা সাজানো (sort) এবং তুলনা (compare) করা হবে। এটি মূলত ক্যারেক্টার এনকোডিং (character encoding) এবং স্ট্রিং অপারেশনের জন্য নিয়ম তৈরি করে, যেমন:

কেস সেনসিটিভিটি (বড় হাতের অক্ষর vs ছোট হাতের অক্ষর, যেমন: A vs a)

অ্যাকসেন্ট সেনসিটিভিটি (যেমন: é vs e)

ভাষাভিত্তিক সাজানোর নিয়ম (যেমন: জার্মান ভাষায় ä কে a-এর কাছাকাছি সাজানো হয়, কিন্তু সুইডিশ ভাষায় z-এর পরে)।

এটি ক্যারেক্টার সেট (character set)-এর সাথে যুক্ত, যা ডাটাবেসে স্টোর করা যায় এমন ক্যারেক্টার (অক্ষর) নির্ধারণ করে।

কোলেশন কেন প্রয়োজন?
১. ডেটা সাজানো (Sorting):

কোলেশন নির্ধারণ করে ডেটা কোন অর্ডারে দেখানো হবে। যেমন: utf8mb4_general_ci কোলেশনে Apple এবং apple একই মনে করা হয় (কেস-ইনসেনসিটিভ), কিন্তু utf8mb4_bin-এ এরা ভিন্ন।

২. স্ট্রিং তুলনা (Comparison):

WHERE ক্লজ বা JOIN-এ স্ট্রিং তুলনার সময় কোলেশন নিয়ম প্রয়োগ হয়। যেমন: 'café' = 'cafe' সত্যি হবে কি না তা কোলেশন উপর নির্ভর করে।

৩. সার্চিংয়ের সঠিকতা:

কোলেশন অনুযায়ী সার্চ রেজাল্ট পরিবর্তিত হয়। যেমন: LIKE '%cat%' কুয়েরিতে Cat বা CAT পাওয়া যাবে কি না তা কোলেশন ঠিক করে।

৪. ভাষা সমর্থন:

বিভিন্ন ভাষার ক্যারেক্টার সঠিকভাবে সাজাতে বা তুলনায় কোলেশন ব্যবহৃত হয়। যেমন: স্প্যানিশ ñ বা জার্মান ß-এর জন্য আলাদা নিয়ম।

৫. ডেটা সামঞ্জস্যতা:

সব অপারেশনে (সাজানো, তুলনা, সার্চ) একই নিয়ম প্রয়োগ করে ডেটার ধারাবাহিকতা বজায় রাখে।

কোলেশনের উদাহরণ
utf8mb4_general_ci:

কেস-ইনসেনসিটিভ, সাধারণ ইউনিকোড সাপোর্ট।

A = a, É = E হিসেব করা হয়।

utf8mb4_bin:

বাইনারি তুলনা (কেস-সেনসিটিভ)।

A ≠ a, É ≠ E।

utf8mb4_unicode_ci:

ইউনিকোডের সম্পূর্ণ সাপোর্ট, বহুভাষার জন্য উপযুক্ত।

কোলেশন কিভাবে সেট করবেন?
১. ডাটাবেস লেভেলে:

sql
Copy
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
২. টেবিল লেভেলে:

sql
Copy
CREATE TABLE mytable (
id INT,
name VARCHAR(255)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
৩. কোলাম লেভেলে:

sql
Copy
CREATE TABLE mytable (
id INT,
name VARCHAR(255) COLLATE utf8mb4_bin
);
কোন কোলেশন বেছে নেবেন?
কেস সেনসিটিভিটি: _ci (কেস-ইনসেনসিটিভ) বা _bin (কেস-সেনসিটিভ) নির্বাচন করুন।

ভাষার প্রয়োজন: বহুভাষার ডেটার জন্য utf8mb4_unicode_ci ভালো।

পারফরম্যান্স: utf8mb4_general_ci দ্রুত, কিন্তু unicode_ci বেশি অ্যাকুরেট।

সতর্কতা
কোলেশন মিসম্যাচ: টেবিল জয়েন বা তুলনায় ভুল এড়াতে সব টেবিল/কোলামে একই কোলেশন ব্যবহার করুন।

ইনডেক্সিং: কোলেশন পরিবর্তন করলে ইনডেক্স পুনরায় বিল্ড করতে হতে পারে।

সংক্ষেপে
কোলেশন MySQL-এ ডেটার সাজানো, তুলনা এবং সার্চিংকে প্রভাবিত করে। অ্যাপ্লিকেশনের ভাষা, কেস সেনসিটিভিটি এবং পারফরম্যান্সের ভিত্তিতে সঠিক কোলেশন বেছে নিন!

Top comments (0)