سیستم مدیریت پایگاه داده Mysql ، با شروع نسخه 4.1 ، از کار با رمزگذاری پشتیبانی می کند. مشکلات اصلی آنها هنگام اتصال پایگاه داده با Php بوجود می آید. در این حالت ، کدگذاری محتوای پایه و اتصال باید مطابقت داشته باشد.
دستورالعمل ها
مرحله 1
توجه داشته باشید که یکی از دلایل عمده مشکلات Mysql این است که رمزگذاری پیش فرض برای پایگاه داده روی latin1 تنظیم شده است. بیشتر سرویس گیرندگان متصل نیز برای آن پیکربندی شده اند ، شما داده وارد می کنید و نتایج را با استفاده از آن مشاهده می کنید. اگرچه این رمزگذاری الفبای سیریلیک را به درستی نشان می دهد ، اما کدهای جدول نمادها در آن با حروف واقعی سیریلیک مطابقت ندارند. بنابراین ، جستجو و مرتب سازی داده ها می تواند نتایج کاملاً غیر قابل پیش بینی ایجاد کند.
گام 2
رمزگذاری پایگاه داده را به یکی از داده ها تغییر دهید که به درستی نویسه های سیریلیک را نشان می دهد ، به عنوان مثال utf-8 یا cp1251. برای انجام این کار ، داده ها را از رمزگذاری Latin1 به cp1251 تبدیل کنید. از تبدیل داده ساده استفاده نکنید ، زیرا کدهای کاراکتر نادرست هستند. بنابراین ، شما باید از اتصال رمزگذاری آنها خلاص شوید. برای انجام این کار ، داده ها و نوع کاراکتر را به داده های باینری تبدیل کنید. از پرس و جو استفاده کنید جدول Alter "Enter table name" t1 change c1 c1 blob.
مرحله 3
برای تغییر رمزگذاری در پایگاه داده Mysql ، یک پرس و جو اجرا کنید ، برای این کار از مثال زیر استفاده کنید: جدول تغییر "وارد کردن نام جدول" t1 تغییر c1 c1 مجموعه گفتگوی متن "نام رمزگذاری مورد نظر را وارد کنید ، به عنوان مثال ، cp1251". حتی یک بایت داده از نظر فیزیکی تغییر نمی کند ، اما قانون شکل گیری کاراکترها تغییر می کند. پس از آن ، برای تغییر رمزگذاری پایگاه داده ، می توانید از یک پرس و جو تبدیل داده ساده استفاده کنید.
مرحله 4
لطفا توجه داشته باشید که هنگام تغییر رمزگذاری جدول در فیلدی که حاوی نمایه ها است ، باید آنها را حذف کرده و دوباره ایجاد کنید ، به عنوان مثال در تمام جداول پایگاه داده بازسازی کنید. هنگام تغییر رمزگذاری ، اطمینان حاصل کنید که کلاینت های بصری از یونیکد پشتیبانی می کنند. به عنوان مثال ، مشتری SQLyog به نادرست محتویات جداولی را که داده ها را در رمزگذاری utf-8 ذخیره می کند ، نشان می دهد.