در این پست خواهید خواند:

    شاید برای شما هم پیش آمده باشد که از روی یک هاست از دیتابیس MYSQL بکاپ کرفته اید وقصد ایمپورت آن روی هاست دیگری داشتید اما با خطای Unknown collation: utf8mb4_0900_ai_ci مواجه شده اید.

    در این مقاله میخواهیم دلیل و نحوه رفع آن را بررسی نمائیم.

    collation utf8mb4_0900_ai_ci یک مجموعه کاراکتر برای پایگاه های داده MySQL است که در MySQL 8.0.1 معرفی شده است. این بر اساس الگوریتم ترکیب یونیکد (UCA) 9.0.0 است و مجموعه کاراکترها utf8mb4 است که طیف گسترده ای از کاراکترهای یونیکد را پشتیبانی می کند.

    ai” در نام collation مخفف “accent insensitive” و “ci” مخفف “case insensitive” است. این بدان معنی است که مقایسه بین کاراکترها بدون در نظر گرفتن تفاوت در حروف یا لهجه انجام می شود.


    اگر خطای «Unknown collation» را دریافت می‌کنید، ممکن است به این دلیل باشد که نسخه سرور MySQL شما قدیمی‌تر از 8.0.1 است و از این دسته‌بندی پشتیبانی نمی‌کند. برای رفع این مشکل می توانید:

    مشکل:

    در حین انتقال یک برنامه تحت وب، هنگام انتقال پایگاه داده در سرور دیگری با خطای زیر مواجه شدم. شناسه دسته بندی(collation id) ممکن است بر اساس نسخه MySQL متفاوت باشد.

    پیام خطا:

    Error 1273 (HY000) at line 25 Unknown collation: ‘utf8mb4_0900_ai_ci’

    اسکرین شات خطا را در حین بازیابی پایگاه داده مشاهده کنید.


    راه حل:

    پس از کمی بررسی، متوجه شدم که ورژن MySQL که در سرور مقصد اجرا می شود، نسخه قدیمی تر از مبداء هست. بنابراین ما دریافتیم که سرور مقصد شامل ترکیب پایگاه داده مورد نیاز نیست.

    سپس کمی در فایل بکاپ تغییر دادیم تا این مشکل برطرف شود. فایل بکاپ دیتابیس را در ویرایشگر متن ویرایش کنید و "utf8mb4_0900_ai_ci" را با "utf8mb4_general_ci" و "CHARSET=utf8mb4" را با "CHARSET=utf8" جایگزین کنید

    رشته زیر را جایگزین کنید:

    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

    با

    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

    در اینجا ما CHARSET را به utf8 تغییر می دهیم، که نسخه قدیمی تر است و محدودیت هایی دارد، قبل از ایجاد تغییرات در پایگاه داده، مفاهیم انتهای این مقاله را مطالعه نمائید.

    اگر از سی پنل استفاده مینمائید میتوانید به آسانی دیتابیس را از قسمت PhpMyAdmin ایمپورت نمائید.

    فایل خود را ذخیره کنید و دیتابیس را ایمپورت کنید.

    کاربران سیستم لینوکس می توانند از دستور sed برای جایگزینی مستقیم متن در فایل ها استفاده کنند.

    sed -i 's/utf8mb4_0900_ai_ci/utf8_general_ci/g' backup.sql  
    sed -i 's/CHARSET=utf8mb4/CHARSET=utf8/g' backup.sql  

    به همبن سادگی. پس از تغییرات بالا، پایگاه داده با موفقیت بازیابی شد!

    امیدواریم این راه حل به شما کمک کرده باشد تا مشکل "Unknown collation: ‘utf8mb4_0900_ai_ci" را حل کنید.


    بردیا
    نویسنده

    سلام، بردیا هستم و بیشتر از 10 سال هست که در زمینه فناوری اطلاعات فعال هستم

    ثبت یک نظر

    آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند *

    0 نظر ثبت شده

    اینستاگرام