رفع خطای جنگو Incorrect string value
رفع خطا 1366 Incorrect string value
خطای زیر زمانی رخ میدهد که در حال واردکردن اطلاعات با کاراکترهای فارسی در جدول یک دیتابیس، در یک پروژه جنگو هستیم.
اگر یکی از ستون های جدول ما، که باید مقادیر فارسی بگیرد، collation آن بر روی مقداری غیر از utf8mb4 قرار داشته باشد، این خطا نمایش داده میشود.
عموما کولیشن دیتابیس ها، به صورت پیشفرض بر روی latin1_swedish_ci قرار دارد که در صورت عدم تغییر به utf8mb4، این خطا رخ میدهد.
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xD8\\xA7\\xD9\\x86\\xD8\\xAA...'
for column `venusdjk_err1366-db`.`auth_permission`.`name` at row 1")
در خطای نمایش داده شده دقیقا مشخص شده است که در زمان مایگریت در این پروژه، در ستون name جدول auth_permission
مشکلی وجود داشته که مانع ادامه migrate شده است.
در سیپنل، وارد phpmyadmin میشویم و دیتابیس پروژه را پیدا و انتخاب میکنیم.
در بین جداول موجود جدول auth_permission
را پیدا میکنیم و روی تب structure کلیک میکنیم تا ساختار جدول را مشاهده کنیم.
در ستون name که مقادیر باید به صورت فارسی ذخیره شود، مقدار collation بر روی latin1_swedish_ci قرار دارد که امکان ذخیره کاراکترهای فارسی را ندارد.
میتوانیم در همین قسمت روی change کلیک کنیم و مقدار collation را تغییر دهیم و بر روی utf8mb4_persian_ci یا utf8mb4_general_ci قرار دهیم و save کنیم و مجدد در ترمینال دستور migrate را اجرا کنیم.
اگر در پروژه فقط همین یک خطا وجود داشت و یک ستون از جدول نیاز به تغییر داشت، با انجام مراحل بالا مایگریت انجام میشود و پروژه ران خواهد شد و در دسترس قرار میگیرد.
اما اگر در جداول و ستونهای دیگری هم چندین خطای دیگر وجود داشته باشد، برای اینکه مجدد مایگریت را به صورت کامل انجام دهیم، تمام جداول را حذف میکنیم و تغییراتی انجام میدهیم و مجدد دستور مایگریت را در ترمینال وارد میکنیم.
حذف جدول های دیتابیس پروژه
قبل از حذف جدول ها، پیشنهاد میشود حتما از هاست فول بک آپ تهیه و دانلود شود، تا در صورت بروز مشکل امکان بازیابی اطلاعات قبل از تغییر وجود داشته باشد.
با استفاده از آموزش زیر میتوانید، فول بک آپ تهیه و دانلود کنید:
آموزش تهیه فول بک آپ سی پنل
باید طبق تصویر زیر، ابتدا اطمینان حاصل کنیم که دقیقا روی دیتابیس پروژه، در حال انجام کار و تغییرات هستیم و اگر روی هاست، وبسایتهای دیگری وجود دارد و دیتابیسهای دیگری هم داریم، اطمینان حاصل کنیم که آنها را ویرایش یا تغییر نمیدهیم.
این مورد نیاز به دقت زیادی دارد چون ممکن است دیتابیس سایتهای دیگر موجود در هاست، را حذف کنیم و یا تغییر دهیم.
2- زدن تیک check all برای انتخاب همه جداول
3- انتخاب گزینه drop از لیست بازشونده
تمام جدولهای دیتابیس را انتخاب و از لیست بازشونده گزینه drop را انتخاب میکنیم و در مرحله بعد حذف همه جداول را با کلیک بر روی دکمه yes تایید میکنیم.
با این کار تمام جدولهای دیتابیس مربوط به پروژه حذف میشوند.
تغییر collation پیشفرض دیتابیس
برای تغییر collation دیتابیس پروژه، با کمک تصویر زیر اقدام میکنیم.
ابتدا دیتابیس مورد نظر خود را انتخاب میکنیم و اگر چند دیتابیس داشته باشیم، مطمئن میشویم که دقیقا دیتابیس پروژه ما میباشد.
1- نام دیتابیس را انتخاب میکنیم. اگر چند دیتابیس داشته باشیم اطمینان حاصل میکنیم که دیتابیس پروژه را انتخاب کردیم.
2- روی تب operations کلیک میکنیم تا صفحهی جدید باز شود.
3- در قسمت collation مقدار را بر روی utf8mb4_general_ci و یا utf8mb4_persian_ci قرار میدهیم.
اگر این گزینه وجود نداشت میتوانیم بر روی utf8mb3_persian_ci قرار دهیم.
4- تیک گزینه change all tabels collations را میزنیم.
5- برای اعمال تغییرات، روی گزینه Go کلیک میکنیم.
بعد از انجام مراحل بالا، مجدد به محیط ترمینال بر میگردیم و بعد از کپی و اجرا کردن دستور سورس پروژه،
با اجرای دستور زیر مایگریت را دوباره انجام میدهیم.
python manage.py migrate
با انجام تغییرات بالا بر روی دیتابیس، مایگریت به خوبی و با موفقیت انجام خواهد شد .
چنانچه با استفاده از آموزش بالا خطای migrate رفع نشد، میتوانید از ناحیه کاربری خود به بخش پشتیبانی تیکت ارسال کنید.(ارسال تیکت) تا توسط همکاران ما بررسی و در تیکت پاسخ داده شود.
اگر هرگونه سوال و یا ابهامی وجود داشت، میتوانید در قسمت نظرات این پست ارسال بفرمایید تا توسط همکاران بخش فنی بررسی و در همین بخش پاسخ داده شود.