前提:
使用Django自帶的test進行單元測試。
問題描述:
運行:python manage.py test,報錯,出現數據庫亂碼的現象,報錯如下:
Creating test database for alias 'default'...
Got an error creating the test database: (1007, u"Can't create database 'test_yd_zy_bank'; database exists")
Type 'yes' if you would like to try deleting the test database 'test_yd_zy_bank', or 'no' to cancel: yes
Destroying old test database 'default'...
(1366, u"Incorrect string value: '\\xE7\\xA4\\xBA\\xE4\\xBE\\x8B...' for column 'func_name' at row 1")
.............
django.db.utils.InternalError: (1366, u"Incorrect string value: '\\xE5\\x8A\\x9F\\xE8\\x83\\xBD...' for column 'name' at row 1")
其中name字段加入了中文,導致亂碼。
錯誤分析:
test生成的臨時數據庫默認不是utf8,不支持中文,導致錯誤。嘗試過修改項目數據庫的字符編碼,並沒有效果,因為test使用的數據庫數據是臨時生成的,並不適用項目配置的數據庫
解決辦法:
在settings.py中添加對database的描述,設置字符編碼默認設置:
'TEST_CHARSET': 'utf8', 'TEST_COLLATION': 'utf8_general_ci',
最后改完如下:
最后,再次運行python manage.py test,成功。
補充 :自定義測試數據庫名字時的配置如下