Вставка ₹ в 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 базы данных.
На рисунке ниже вы можете увидеть колляцию этого пертикулярного поля.
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/