Django2.x连接MySQL8.x的错误解析
MySQL8.0的默认认证加密方式和之前版本不同,为了兼容,设置default_authentication_plugin=mysql_native_password
,若不设置,后面会报错。
如果使用的是Django2.x
以及MySQL8.x
,那么很大机率会出现执行数据迁移指令后,会报错(django.db.utils.OperationalError: (2059, <NULL>)).
此错误原因是MySQL8.x采用了新的加密方式( MySQL8.0默认认证加密方式为caching_sha2_password),但Django2.x并不识别此种加密,导致无法连接到数据库。
解决方法1:修改MySQL8.x密码加密方式,改成mysql_native_password
# 选择要操作的库 USE ‘你的数据库名’; # 修改密码加密方式 ALTER USER '你的账号'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的账号密码'; # 刷新数据库 FLUSH PRIVILEGES;
然后进行数据库迁移,便解决问题:
python manage.py makemigrations # 生成迁移 python manage.py migrate # 执行迁移