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

问题描述 投票:0回答:2

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

mysql django python-3.x utf8mb4 fixture
2个回答
1
投票

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


0
投票

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

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

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

同时,使用MySQL的CHARACTER SET utf8;这可能会让你去。

© www.soinside.com 2019 - 2024. All rights reserved.