تفاوت CHARACTER SET و COLLATE در MySQL

سلام.

شاید براتون پیش اومده باشه که موقع ایجاد یه دیتابیس، تفاوت collate و character set چی هست و یا اینکه utf8_persian_ci بهتره یا utf8_general_ci.

من امروز تفاوت این دو مورد رو برای شما می نویسم و امیدوارم به دردتون بخوره.

 

character set یک لیست از علائم و سیمبول هاست. اگر شما از ascii استفاده کنید، فقط قادر خواهید بود که اعداد و حروف انگلیسی و یک سری کاراکتر محدود رو ذخیره کنید و نمایش بدید. اما مثلا اگر از latin1 استفاده کنید می تونید کاراکترهای زبان های اروپایی که خاص هستند (و توی زبان انگلیسی وجود ندارند رو هم نشون بدید مثل 'ë', 'õ', 'Ñ') . در این بین uft8 کامل ترین مجموعه سیمبول ها رو داره که علاوه بر زبان های انگلیسی، اروپایی و ... می تونه حروف زبانهای فارسی، عربی و حتی چینی و ژاپنی رو هم نشون بده. پس character set مجموع ای از سیمبول هاست.

 

اما collation یک سری قواعد هست برای مقایسه کاراکتر ها که این مقایسه به نوع collationی که انتخاب شده بستگی داره. به عنوان مثال (در 'latin1_swedish_ci' و  'latin1_german1_ci') وقتی شما یک کوئری رو اجرا می کنید، در نتیجه ی بازگشتی ، کلمه ای که با حرف 'ö'شروع میشه بین کلماتی که با حرف 'o' و 'p'قرار می گیره. اما در collationهای دیگه کلمه ای که با حرف 'ö'شروع میشه بعد از سایر کلمات قرار میگیره.

در واقع collation قواعدی رو تعریف میکنه که به وسیله اون ، کاراکترها با هم مقایسه میشن.

همچنین یک سری حروف در نام collationها وجود داره مثل'bin'، 'general'  و 'ci' (مثل 'utf8_general_ci' ). تفاوت این سه مورد رو با یک مثال مشاهده میکنید.

  • he "bin" collations are the most strict: SELECT "b" = "B" => FALSE

  • the "ci" collations are not case sensitive: SELECT "b" = "B" => TRUE

  • the "general" tend to ignore some differences: SELECT "a" = "à" => TRUE

 

وقتی قراره فقط کاراکترهای فارسی رو ذخیره کنید، بهترین گزینه utf8_persian_ci هست. اما وقتی که ترکیب چند زبان رو می خواین ذخیره کنید، uft8_general_ci و utf8_unicode گزینه های خوبی هستند.

امیدوارم به دردتون خورده باشه.

رضا درودی

نظرات   

 
#2 نسرین 1395-09-27 12:29
مهندس
دستت درد نکنه
مفیییییید
نقل قول
 
 
#1 افشین 1394-10-28 07:02
ممنون.
مفید بود. بخصوص قسمت آخر در مورد bin,ci,general.
نقل قول
 

اضافه کردن نظر


کد امنیتی
تغییر کد امنیتی