Вставка ₹ в python Django mysql. я использую frontend react и backend Python

Здравствуйте, когда я ввожу ₹ в текстовое поле, я получаю

django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE2\\x82\\xB9' for column 'sk_ver_reason' at row 1")

это текстовое поле является полем описания, mysql принимает валюту других стран, но не индийскую валюту, у меня много ошибок с utf8mb...

когда я нажимаю api этот знак не работает, но запись для этого api входит в базу данных, то же самое я нажимаю снова он работает успешно, это ошибка python django или чисто ошибка mysql базы данных.

На рисунке ниже вы можете увидеть колляцию этого пертикулярного поля.

enter image description here

reporter_data = {
            'org_id': org_id,
            'email_id' : data['email'],
            'first_name' : data['first_name'],
            'last_name' : data['last_name'],
            'individual_enterprise_government' : individual_enterprise_government,
            'company_individual_address' : company_individual_address,
            'mobile' : mobile,
            'phone' : phone,
            'fax' : fax,
            'comp_individual_country': country,
            'comp_individual_state' : state,
            'comp_individual_city' : city,
            'comp_individual_pin' : comp_individual_pin,
            'company_url': company_url,
            'company_name': company_name,
            'sector_name': sector,
            'sub_sector_name': sub_sector,
            'other_sector_name' : other_sector_name,
            'organization_type':organization_type,
            'organization_severity': organization_severity,
            'informed_email_id' : informed_email_id,
            'informed_email_id_cc1' : informed_email_id_cc1,
            'informed_email_id_cc2' : informed_email_id_cc2,
            'informed_email_id_cc3' : informed_email_id_cc3,
            'user':userdata,
            'is_verified':True
        }
        if 'sk_ver_reason' in list_of_items:
            reporter_data.update({'sk_ver_reason':data['sk_ver_reason']})
        print("DATAATTTATATTt", reporter_data)
        
        ReporterDetails.objects.create(**reporter_data)

При печати я получаю все данные reporter_data, но при выполнении ORM create происходит сбой, когда поле sk_ver_reason имеет ₹ валюту.

Эта ошибка исходит от вашего сервера mysql, а не от django-orm.

Похоже, это происходит потому, что ваша база данных не настроена на поддержку набора символов utf8. Символ рупии должен храниться как utf8.

Для рупии вам нужно только 3-байтовое представление юникода, для которого вы можете использовать следующую команду alter в mysql для обеспечения поддержки базы данных.

ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

Если вы ожидаете, что будет поддерживаться больше символов Юникода, включите поддержку и 4-байтовых символов.

-- Change a database
ALTER DATABASE [database_name] 
  CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; 

-- Change a table
ALTER TABLE [table_name] 
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

-- Change a column
ALTER TABLE [table_name] 
  CHANGE [column_name] [column_name] VARCHAR(255) 
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Читайте больше на: https://sebhastian.com/mysql-incorrect-string-value/

Вернуться на верх