Django 2.0 - 使用dumpdata中的fixture来测试会产生utf8mb4编码错误

时间:2017-12-22 09:15:13

标签: mysql django python-3.x utf8mb4 fixture

我正在为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

2 个答案:

答案 0 :(得分:1)

事实证明,将Django自身生成的文件的编码更改为UTF-8可以解决问题。

答案 1 :(得分:0)

您期待Пло?如果是这样,那就是合理的UTF-8编码。

&#34;未知编码:utf8mb4&#34; - 你有Django和/或MySQL的古董版本?你在运行什么版本?

表格定义是什么样的?可能列是latin1而不是utf8utf8mb4

同时,使用MySQL&#39; CHARACTER SET utf8;这个可能让你去。