项目背景:
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的时候会指定字符集跟排序规则。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)