Django 2.0 - 使用转储数据中的固定装置进行测试会出现 utf8mb4 编码错误

Django 2.0 - test using fixtures from dumpdata gives utf8mb4 encoding errors

我的 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

如您所见,我已将灯具的格式指定为 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

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

"unknown encoding: utf8mb4" -- 你有一个古董版的 Django and/or MySQL?你是什​​么版本 运行?

table 的定义是什么样的?也许列是 latin1 而不是 utf8utf8mb4.

同时,使用MySQL的CHARACTER SET utf8;这 可能 让你继续前进。

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