دقیقه مطالعه

رفع خطای جنگو Incorrect string value

رفع خطای جنگو  Incorrect string value
01 - بهمن - 1402

 رفع خطا 1366 Incorrect string value

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")

خطای بالا نشان می دهد  در حال وارد کردن اطلاعات با کاراکتر های فارسی در جدول یک دیتابیس در یک پروژه جنگو هستیم که یکی از ستون های آن جدول که باید مقادیر فارسی بگیرد، مقدار collation آن بر روی مقداری غیر از utf8mb4  قرار دارد و  به صورت پیش فرض بر روی latin1_swedish_ci  قرار دارد.

 

 

در خطای نمایش داده شده دقیقا مشخص شده که در زمان مایگریت در ستون  name جدول auth_permission  مشکلی وجود داشته است که مانع ادامه migrate  شده است.

وارد phpmyadmin می شویم  و دیتابیس پروژه را پیدا و انتخاب می کنیم . در بین جداول موجود جدول auth_permission را پیدا می کنیم و روی تب structure  کلیک می کنیم تا ساختار جدول را مشاهده کنیم.

 

 ستونی از جدول که خطا دارد

 

در ستون name  که می خواهیم مقادیر فارسی وارد کنیم، مقدار collation  بر روی latin1_swedish_ci  قرار دارد که امکان ذخیره کاراکترهای فارسی را ندارد.

می توانیم در همین قسمت روی change  کلیک کنیم و مقدار collation را تغییر دهیم و بر روی utf8mb4_persian_ci یا utf8mb4_general_ci  قرار دهیم و save  کنیم و مجدد در ترمینال دستور migrate  را اجرا کنیم.

 

تغییر collation ستونی که خطا دارد

 

اگر در پروژه فقط یک ستون از جدول نیاز به تغییر داشت و فقط همین یک خطا وجود داشت با انجام مراحل بالا مایگریت انجام می شود و پروژه ران خواهد شد و در دسترس قرار می گیرد.

اما اگر در جداول  و ستون های دیگری هم  چندین خطای دیگر وجود داشته باشد، برای اینکه مجدد مایگریت را به صورت کامل انجام دهیم تمام جداول را حذف می کنیم و تغییراتی انجام می دهیم و مجدد دستور مایگریت را در ترمینال وارد می کنیم.

 

حذف جدول های دیتابیس پروژه

باید طبق تصویر زیر، ابتدا اطمینان حاصل  کنیم که دقیقا روی همین دیتابیس در حال انجام کار و تغییرات هستیم و اگر روی هاست ما وب سایت های دیگری وجود دارد و دیتابیس های دیگری داریم، آنها را ویرایش یا تغییر نمی دهیم.

این مورد نیاز به دقت زیادی دارد چون ممکن است دیتابیس سایت های دیگر را حذف کنیم و یا تغییر دهیم.

 

حذف تمام جداول دیتابیس 1- نام دیتابیس مربوط به پروژه ما

2- زدن تیک check all  برای انتخاب همه جداول

3- انتخاب گزینه drop  از لیست بازشونده

 

تمام جدول های دیتابیس را انتخاب و  از لیست بازشونده گزینه drop را انتخاب می کنیم و در مرحله بعد حذف همه جداول را با کلیک بر روی دکمه yes  تایید می کنیم

با این کار تمام جدول های دیتابیس مربوط به پروژه حذف می شوند.

 

تغییر collation  پیش فرض دیتابیس

برای تغییر 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

با انجام تغییرات بالا بر روی دیتابیس، مایگریت به خوبی و با موفقیت انجام خواهد شد .

 

چنانچه با استفاده از آموزش بالا خطای migrate  رفع نشد  می توانید از ناحیه کاربری خود به بخش پشتیبانی تیکت ارسال کنید  (ارسال تیکت)  تا توسط همکاران ما بررسی و در تیکت پاسخ داده شود و یا اگر هرگونه سوال و یا ابهامی وجود داشت می توانید در قسمت نظرات این پست ارسال بفرمایید تا توسط همکاران بخش فنی بررسی و در همین بخش پاسخ داده شود.

5/5 - (2 امتیاز)
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

[bws_google_captcha]