Python3连接Mysql8.0遇到的问题及处理步骤

  • Post category:Python

下面是详细讲解“Python3连接Mysql8.0遇到的问题及处理步骤”的完整攻略:

背景

使用 Python 语言访问数据库是我们日常开发中必不可少的操作之一。在 Python 中,我们可以使用 MySQL Connector Python 模块来连接 MySQL 数据库。但是,当我们在连接 MySQL 8.0 数据库时,可能会遇到一些问题。本攻略将介绍在 Python3 中连接 MySQL 8.0 数据库时可能遇到的几种问题,并提供相应的解决步骤。

问题1:Authentication plugin ‘caching_sha2_password’ cannot be loaded

在 Python3 中使用 MySQL Connector Python 模块连接 MySQL 8.0 数据库时,可能会遇到以下报错信息:

Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

这是因为 MySQL 8.0 默认采用了 caching_sha2_password 插件来对用户密码进行加密。而 Python Connector Python 模块默认不支持此插件。

解决步骤

解决此问题的方法有两种:

方法一:更改 MySQL 用户的加密方式

通过更改 MySQL 用户的加密方式,使之与 Python Connector Python 模块默认支持的加密方式一致,即可解决此问题。可以通过以下命令更改用户的加密方式:

ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

此命令将用户 ‘username’ 的加密方式更改为 mysql_native_password 。这里的 ‘password’ 应替换为你想要设置的密码。

方法二:安装 MySQL Connector Python 8.0

安装 MySQL Connector Python 8.0 版本,即可支持 caching_sha2_password 加密方式。可以通过以下命令安装:

pip install mysql-connector-python==8.0.11

问题2:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte

在 Python3 中连接 MySQL 8.0 数据库时,如果数据库中包含非 utf-8 编码的数据,可能会遇到以下报错信息:

UnicodeDecodeError: 'utf-8' codec can't decode byte ...

这是因为 Python 默认使用 utf-8 编码来解码数据,而数据库中的数据编码不一定是 utf-8。

解决步骤

解决此问题的方法为,将 MySQL 客户端使用的编码格式更改为 utf-8 。可以通过以下步骤实现:

  1. 打开 MySQL 配置文件 my.cnf 。可以使用以下命令来查找 my.cnf 文件路径:

mysql --help | grep cnf

  1. 打开 my.cnf 文件,在 [mysql] 和 [mysqld] 段落中添加以下代码:

“`
[mysql]
default-character-set=utf8

[mysqld]
init_connect=’SET collation_connection = utf8_unicode_ci’
init_connect=’SET NAMES utf8′
character-set-server=utf8
collation-server=utf8_unicode_ci
“`

保存文件并关闭。

  1. 重启 MySQL 服务。

service mysql restart

或者:

/etc/init.d/mysql restart

以上便是在 Python3 中连接 MySQL 8.0 数据库时可能遇到的两种问题及对应的解决步骤,希望对你有所帮助。