Azure 中的 Django 应用程序 - /edit_profile/ 处的 OperationalError(1366,“第 1 行的列 'first_name' 的字符串值不正确:'\\xC5

Posted

技术标签:

【中文标题】Azure 中的 Django 应用程序 - /edit_profile/ 处的 OperationalError(1366,“第 1 行的列 \'first_name\' 的字符串值不正确:\'\\\\xC5\\\\x9B\'”)【英文标题】:Django app in Azure - OperationalError at /edit_profile/ (1366, "Incorrect string value: '\\xC5\\x9B' for column 'first_name' at row 1")Azure 中的 Django 应用程序 - /edit_profile/ 处的 OperationalError(1366,“第 1 行的列 'first_name' 的字符串值不正确:'\\xC5\\x9B'”) 【发布时间】:2022-01-19 08:50:02 【问题描述】:

我在 Azure 上托管了连接到 mysql 数据库(Azure Database for MySQL)的 Django 应用。我想编辑我的个人资料,所以我将 ść(用于测试目的)放在名字中,我收到以下错误:

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 也不行)

collat​​ion_server = utf8_general_ci

据我所知,Django 默认使用 utf-8,所以我的问题是如何让用户在其用户名、名字和姓氏中使用波兰语、法语、德语等字母?

【问题讨论】:

如果你从浏览器复制回溯使用Switch to copy-and-paste view,否则直接从终端复制。 好像是双重转义。 @GiacomoCatenazzi - 你愿意详细说明吗?我不认为它是“双重转义”或“双重编码”。 【参考方案1】:

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被用于需要包含ść等的列

here 讨论了许多字符集问题,但我认为不包括此问题。不过,如果您遇到其他问题,请查看 Q&A。

如果您使用的是“终端”,请确保它使用 UTF-8。对于 Windows 的“cmd”,请参阅chcp 65001

【讨论】:

以上是关于Azure 中的 Django 应用程序 - /edit_profile/ 处的 OperationalError(1366,“第 1 行的列 'first_name' 的字符串值不正确:'\\xC5的主要内容,如果未能解决你的问题,请参考以下文章

Azure 上的 Django 应用错误地从 Azure Blob 加载静态文件

DevOps 和 Azure 应用服务中的环境变量

限制 Azure 应用程序访问 OneDrive 中的特定文件夹

为什么我的Django应用程序在Azure上使用UUID无效语法失败

从 Azure 中的辅助角色部署 Web 角色

开始生产芹菜工人。在 Azure/linux 应用服务上使用 Django/Python