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 也不行)
collation_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 加载静态文件
限制 Azure 应用程序访问 OneDrive 中的特定文件夹