راهنمای کامل کولیشن collation پایگاهداده
معرفی کامل کولیشن collation پایگاهداده
در این پست از پارس وب سرور به یکی از مهم ترین مفاهیم دیتابیس یعنی کولیشن می پردازیم که در تمام پروژه هایی که از دیتابیس mysql استفاده می کنند کاربرد و استفاده دارد.
مشکل در ذخیره کردن کاراکترهای فارسی در وردپرس یا نمایش علامت ؟ به جای کاراکترهای فارسی و همینطور برخی خطاهای خاص در جنگو، مربوط به کولیشن نادرست جداول دیتابیس پروژه میباشد.
در ادامه این پست آموزشی پارس وب سرور با ما همراه باشید.
برای وارد کردن و خواندن اطلاعات از پایگاهداده دانستن مفاهیم کولیشن collation و کاراکترست character set در پایگاهداده های mysql ضروری میباشد.
عدم استفاده از کولیشن درست و مناسب، باعث کاهش بازدهی پروژه و یا وب سایت و بروز خطا در زمان ذخیره کردن و خواندن اطلاعات از پایگاهداده خواهد شد.
کولیش (collation) چیست ؟
کولیشن collation به یک سری از قواعد و قوانینی گفته میشود که طبق این موارد، رشته کاراکترها در پایگاهداده ذخیره، مقایسه و مرتب میشوند.
همینطور در مورد کاراکترهای خاص در زبان های خاص که لهجه یا accesnt محسوب میشوند؛ استانداردهایی را تعیین میکند که طبق آن، با این حروف و کاراکترها رفتار شود.
کولیشن پیش فرض mysql مقدار latin1_swedish_ci میباشد.
در صورتی نوع کولیشن تعریف نشده باشد، مقدار latin1_swedish_ci به صورت پیش فرض برای پایگاهداده و جدول ها، ست میشود.
یکی از دلایل پیش فرض بودن latin1_swedish_ci و استفاده از این کولیشن در مقایسه با کولیشن latin1_general_ci این است که کولیشن latin1_swedish_ci از کاراکترهای موجود در زبانهای کشورهای اروپایی پشتیبانی میکند.
در صورتی که مقدار خاصی برای کولیشن جدول پایگاهداده در نظر نگرفتید، میتوانید از utf8mb4_unicode_ci
استفاده کنید که تمام کارکترهای فارسی و انگلیسی را پشتیبانی میکند.
انواع کولیشن ها و اصطلاحات آنها
در ادامه مرور کوتاهی بر اصطلاحات و مفاهیم مربوط به کولیشن خواهیم داشت.
Case Sensitive (به صورت مخفف cs)
برای رشته ها و کاراکترهایی به کار میرود که به کوچک و بزرگ بودن حروف حساس هستند.
در زبان فارسی Case Sensitive اهمیتی ندارد چون حروف کوچک و بزرگ در زبان فارسی تعریف نشده هست.
case insensitive (به صورت مخفف ci)
در این حالت رشته ها و کاراکترهای ذخیره شده در پایگاهداده به کوچک و بزرگ بودن حروف حساس نخواهند بود.
در زمان اجرای کوئری ها هم، حروف کوچک و بزرگ تاثیر نخواهند داشت.
Accent Sensitive (به صورت مخفف as)
این گزینه برای کارکترهایی که در زبان دارای لهجه هستند استفاده میشوند مانند کلمه résumé
که حرف é
در آن دارای اکسنت میباشد.
Accent Insensitive (به صورت مخفف ai)
این گزینه به این معنا هست که کارکترهای وارد شده در پایگاهداده به لهجه (accent) حساس نخواهد بود.
Width Sensitive
در این صورت اگر کارکترهای ما به صورت Varchar باشند به جای اینکه هر کاراکتر در یک بایت ذخیره شوند در دو بایت ذخیره میشوند.
کاراکترست (characterset) چست ؟
characterset تعدادی حروف و نشانه است که توسط کولیشن های مختلف با یکدیگر مقایسه میشوند.
برای کاراکترهای غیر انگلیسی میتوان از انکدینگ utf8 استفاده کرد و utf8 مخفف عبارت Unicode Transformation Format – 8-bit میباشد.
در حالیکه برای کارکترهای انگلیسی از یک بایت برای هر کارکتر استفاده میشود، برای کاراکترهای utf8 از 4 بایت برای ذخیره هر کاراکتر، استفاده میشود.
نامگذاری کولیشن ها دیتابیس
هر کولیشن دارای اطلاعات خاصی است که طبق آن نامگذاری میشود.
به طور مثال کولیشن utf8mb4_0900_ai_ci به معنی زیر میباشد :
utf8mb4_0900_ai_ci
utf8mb4 : character set
0900 : UCA 9.0.0 weight keys
ci : case-insensitive collation
ai : accent-insensitive collation
مشکل ذخیره شدن اطلاعات در پایگاهداده به صورت علامت سوال
اگر کولیشن جدول، ستون و یا دیتاییس بر روی utf8 تنظیم نشده باشد در زمان ذخیره کردن اطلاعات فارسی در پایگاهداده، اطلاعات متنی به صورت علامت سوال (؟؟؟؟) ذخیره میشوند.
در صورت اصلاح کولیشن این پایگاهداده، اطلاعات قبلی ذخیره شده در پایگاهداده، تغییر نمیکند و فقط اطلاعات ذخیره شده بعد از تغییر، به درستی ذخیره میشوند.
در وبسایتها و پروژههایی که از زبان فارسی استفاده میشود ، پیشنهاد میشود کولیشن utf8mb4_perisian_ci استفاده شود.
تغییر کولیشن یک جدول در پایگاهداده از طریق phpmyadmin
1 – نام جدولی که قصد داریم کولیشن آن را تغییر دهیم.
2- با کلیک بر روی دکمه go دستوری وارد شده اجرا و کولیشن تغییر میکند
ALTER TABLE MYTABLE CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- حتما قبل از هر تغییری بر روی پایگاهداده یک بک آپ از آن تهیه کنید و از phpmyqdmin پایگاهداده را اکسپورت کنید، چون تغییرات روی پایگاهداده برگشت ناپذیر هستند و ممکن است نیاز باشد پایگاهداده به زمان قبل از تغییرات برگردانده شود.
- در صورت نیاز میتوانید با استفاده از آموزش تهیه فول بک آپ سی پنل ،از هاست خود یک فول بک آپ تهیه و دانلود کنید.
تغییر کولیشن پایگاهداده از طریق تب operation در phpmyadmin
میتوان از تب operations در phpmyadmin کولیشن یک پایگاهداده، جدول و یا ستون های یک جدول را تغییر داد.
- نام پایگاهدادهای هست که ما در آن قرار داریم و تغییرات بر روی آن اعمال میشود
- تب operations در پنجره مربوط به پایگاهداده انتخاب شده
- کولیشن انتخابی، با کلیک بر روی این قسمت لیستی از کولیشنها نمایش داده میشود که قابل انتخاب هستند
- با انتخاب این گزینه، کولیشن جداول در صورتی که مقدار خاصی تعریف نشود، مقداری که در اینجا انتخاب میشود، ست میشود.
- با انتخاب این گزینه کولیشن تمام ستونهای جدیدی که ایجاد میشوند در صورتی که نیاز به تعریف کولیشن باشد اما کولیشنی تعریف نشود، کولیش انتخاب شده به عنوان کولیشن ستون جدول قرار میگیرد و ست میشود.
* حتما قبل از تغییرات از پایگاهداده بک آپ بگیرید.
اگر نوع (type) ستونهای ما int, DATE , BINARY برخی انواع دیگر باشد امکان انتخاب کولیشن به دلیل فرمت خاص این نوع وجود ندارد و هیچ کولیشنی نمیگیرد.
تغییر کولیشن یک ستون یک جدول از یک پایگاهداده
برای تغییر کولیشن یک ستون داده در یک جدول باید بر روی تب structure آن جدول کلیک کنیم تا لیست ستونهای آن جدول نمایش داده شود.
هر ستون نمایش داده شده دارای یک گزینه به نام change است که با کلیک بر روی آن صفحه جدید باز میشود که میتوان کولیشن ستون انتخابی را تغییر داد.
چنانچه در مورد کولیشنهای دیتابیس در پروژه و یا وب سایت شما مشکل و یا سوالی وجود دارد می توانید از بخش پشتیبانی درخواست خود را ارسال کنید. (ارسال تیکت)