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

【django在进行单元测试时报错MySQLdb.,第1张

项目背景:

django在进行单元测试时报错


问题描述:

报错出在进行单元测试时,创建虚拟数据库的时候,输入python manage.py test命令后报错。
MySQLdb._exceptions.OperationalError: (1366, “Incorrect string value: ‘\xE4\xBF\xA1\xE6\x81\xAF…’ 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的时候会指定字符集跟排序规则。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/917348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存