我在mySQL数据库中使用utf8mb4编码。即使使用西里尔字符,我的所有Django应用程序都能正常使用它。
但是,当我运行./manage.py test <module>
并尝试加载从同一数据库转储的夹具时,我得到有关编码的错误。其中一个错误是:
Could not load advert.Region(pk=1): (1366, "Incorrect string value: '\\xD0\\x9F\\xD0\\xBB\\xD0\\xBE...' for column 'region_name' at row 1")
然后我在Django设置中设置DEFAULT_CHARSET,错误更改为LookupError: Problem installing fixture '<path>/test_db_one.xml': unknown encoding: utf8mb4
正如您所看到的,我已将fixture的格式指定为XML,因为它可以更好地处理编码。
我的设置模块具有以下属性:
DEFAULT_CHARSET = 'utf8mb4'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'autoplusplus_dev',
'USER': 'autoplusplus_django',
'PASSWORD': '1029',
'HOST': 'localhost',
'PORT': '3306',
'STORAGE_ENGINE': 'INNODB',
'OPTIONS': {'charset': 'utf8mb4'},
'TEST_CHARSET': 'utf8mb4',
}
}
我安装了mysqlclient 1.3.12
事实证明,将Django自身生成的文件的编码更改为UTF-8可以解决这个问题。
你期待Пло
?如果是这样,那就是合理的UTF-8编码。
“未知编码:utf8mb4” - 你有Django和/或MySQL的古董版本?你在运行什么版本?
表定义是什么样的?也许列是latin1
而不是utf8
或utf8mb4
。
同时,使用MySQL的CHARACTER SET utf8
;这可能会让你去。