Azure 中的 Django 应用程序 - /edit_profile/ 处的操作错误(1366,"Incorrect string value: '\xC5\x9B' for column 'first_name' at row 1")
Django app in Azure - OperationalError at /edit_profile/ (1366, "Incorrect string value: '\\xC5\\x9B' for column 'first_name' at row 1")
我在 Azure 上托管了 Django 应用程序,该应用程序连接到 MySQL 数据库(用于 MySQL 的 Azure 数据库)。我想编辑我的个人资料,所以我将 ść(用于测试目的)放在名字中,但出现以下错误:
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,所以我的问题是如何让用户在他们的用户名、名字和姓氏中使用波兰语、法语、德语等字母?
编辑:
这个问题的解决方法比我想象的简单多了。我检查了所有表中的编码,显然默认编码设置为 latin1_swedish_ci
而不是 uft8mb4
。我在我的数据库选项中指定了它:
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': 'SET character_set_connection=utf8mb4;'
'SET collation_connection=utf8mb4_unicode_ci;'
"SET NAMES 'utf8mb4';"
"SET CHARACTER SET utf8mb4;"},
并更改了所有现有表中的编码。
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(外界的说法)是一样的。它包括世界上 'all' 种语言的编码。其中包括波兰语、法语、德语、汉语、切诺基语、克林贡语等
SHOW CREATE TABLE
还应该说 utf8mb4 用于需要包含 ść
等的列
讨论了很多字符集问题,但我认为不包括这个问题。不过,如果您 运行 遇到其他问题,请查看问答。
如果您使用的是“终端”,请确保它 也在使用 UTF-8。对于 Windows' "cmd",请参阅 chcp 65001
。
我在 Azure 上托管了 Django 应用程序,该应用程序连接到 MySQL 数据库(用于 MySQL 的 Azure 数据库)。我想编辑我的个人资料,所以我将 ść(用于测试目的)放在名字中,但出现以下错误:
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,所以我的问题是如何让用户在他们的用户名、名字和姓氏中使用波兰语、法语、德语等字母?
编辑:
这个问题的解决方法比我想象的简单多了。我检查了所有表中的编码,显然默认编码设置为 latin1_swedish_ci
而不是 uft8mb4
。我在我的数据库选项中指定了它:
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': 'SET character_set_connection=utf8mb4;'
'SET collation_connection=utf8mb4_unicode_ci;'
"SET NAMES 'utf8mb4';"
"SET CHARACTER SET utf8mb4;"},
并更改了所有现有表中的编码。
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(外界的说法)是一样的。它包括世界上 'all' 种语言的编码。其中包括波兰语、法语、德语、汉语、切诺基语、克林贡语等
SHOW CREATE TABLE
还应该说 utf8mb4 用于需要包含 ść
等的列
讨论了很多字符集问题
如果您使用的是“终端”,请确保它 也在使用 UTF-8。对于 Windows' "cmd",请参阅 chcp 65001
。