Как настроить MySQL 5.5 для хранения высоких кодовых точек? - PullRequest
0 голосов
/ 27 мая 2020

Заранее благодарим вас за то, что уделили время чтению.

В настоящее время я разрабатываю проект в Django 2.X (python 3.7.4), который использует MySQL 5.5 в качестве БД.

Этот проект потребляет данные из внешнего API и иногда вызывает следующую ошибку при попытке сохранить потребляемые данные (в виде специальной строки c, взятой из JSON):

mymodel.value = mystring  # string taken from the JSON
mymodel.save()
...   

django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8E\\xA8' for column 'value' at row 1")

Я выделил одну из JSON строк, вызывающих проблемы, и проверил каждый из символов следующим образом:

for i in mystring:
    print(i, ord(i))

, который возвращает:

...
d 100
! 33
  32
 127912

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

Я также изменил кодировку столбца в таблице базы данных:

ALTER TABLE <my_table> CHANGE COLUMN value value LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

* Field: value
* Type: longtext
* Collation: utf8mb4_unicode_ci
* Null: NO
* Privileges: select,insert,update,references

Не повезло

Какие-нибудь предложения по сохранению строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...