Приложение Django в Azure - OperationalError at /edit_profile/ (1366, "Неверное строковое значение: '\\xC5\\\x9B' для столбца 'first_name' в строке 1")

У меня есть приложение Django, размещенное на Azure, которое подключено к базе данных MySQL (Azure Database for MySQL). Я хотел отредактировать свой профиль, поэтому я поставил ść (в целях тестирования) в First name и получил следующую ошибку:

OperationalError at /edit_profile/
(1366, "Incorrect string value: '\\xC5\\x9B\\xC4\\x87' for column 'first_name' at row 1")
Request Method: POST
Request URL:    http://127.0.0.1:8000/edit_profile/
Django Version: 3.2
Exception Type: OperationalError
Exception Value:    
(1366, "Incorrect string value: '\\xC5\\x9B\\xC4\\x87' for column 'first_name' at row 1")

Traceback Switch to copy-and-paste view
C:\Users\myname\Anaconda3\lib\site-packages\django\db\backends\utils.py, line 84, in _execute
                return self.cursor.execute(sql, params) …
▶ Local vars
C:\Users\myname\Anaconda3\lib\site-packages\django\db\backends\mysql\base.py, line 73, in execute
            return self.cursor.execute(query, args) …
▶ Local vars
C:\Users\myname\Anaconda3\lib\site-packages\MySQLdb\cursors.py, line 206, in execute
        res = self._query(query) …
▶ Local vars
C:\Users\myname\Anaconda3\lib\site-packages\MySQLdb\cursors.py, line 319, in _query
        db.query(q) …
▶ Local vars
C:\Users\myname\Anaconda3\lib\site-packages\MySQLdb\connections.py, line 259, in query
        _mysql.connection.query(self, query) …
▶ Local vars
The above exception ((1366, "Incorrect string value: '\\xC5\\x9B\\xC4\\x87' for column 'first_name' at row 1")) was the direct cause of the following exception:
C:\Users\myname\Anaconda3\lib\site-packages\django\core\handlers\exception.py, line 47, in inner

Мои параметры сервера на Azure следующие:

character_set_server = utf8mb4 (utf8 тоже не работает)

collation_server = utf8_general_ci

Насколько я знаю, Django использует utf-8 по умолчанию, поэтому мой вопрос заключается в том, что я могу сделать, чтобы позволить пользователям использовать польские, французские, немецкие и т.д. буквы в их именах, именах и фамилиях?

Hex C59B C487 - это кодировка UTF-8 для ść.

Каковы настройки подключения? Они должны быть примерно такими:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS': {
                    'charset': 'utf8mb4',
                    'use_unicode': True, },
    },
}
my.cnf:

[mysqld]
character-set-server=utf8mb4
default-collation=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

utf8mb4 (термин MySQL) - это то же самое, что UTF-8 (термин внешнего мира). Он включает кодировку для "всех" языков мира. Это включает польский, французский, немецкий, китайский, чероки, клингонский и т.д.

SHOW CREATE TABLE также следует указать, что utf8mb4 используется для столбцов, которые должны содержать ść и т.д.

Многие проблемы с кодировками обсуждаются здесь, но я не думаю, что эта проблема включена. Тем не менее, если вы столкнулись с другой проблемой, проверьте этот Q&A.

Если вы используете "терминал", убедитесь, что он, тоже, работает с UTF-8. Что касается "cmd" в Windows, смотрите chcp 65001.

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