栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【django在进行单元测试时报错MySQLdb.

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【django在进行单元测试时报错MySQLdb.

项目背景:

django在进行单元测试时报错


问题描述:

报错出在进行单元测试时,创建虚拟数据库的时候,输入python manage.py test命令后报错。
MySQLdb._exceptions.OperationalError: (1366, “Incorrect string value: ‘xE4xBFxA1xE6x81xAF…’ for column ‘name’ at row 1”)


原因分析:

由于django在每次运行单元测试时,会临时新建一个数据库,测试完成后再删除。
原因出在 默认的 mysql 的排序规则在未指定时默认不是 utf8_general_ci
默认是一个 latin1 开头的规则, 此规则会导致中文一些编码问题。


解决方案:

修改Django的settings.py,将数据库配置添加“TEST”的CHARSET 和 COLLATION 编码,如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'messagedb',
        'USER': 'admin',
        'PASSWORD': 'admin',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'TEST':{
            'CHARSET':'utf8',
            'COLLATION':'utf8_general_ci',
        }
    },
}

备注:

也有修改mysql默认字符集的解决方法,没验证过。
感觉不进行单元测试是不是就不用这么搞了,部署上线后不会有问题吧,在创建mysql的时候会指定字符集跟排序规则。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号