mysql 8 使用 qt 的身份验证问题
Authentication problem with mysql 8 using qt
我正在开发一个可以连接到 mysql 服务器的 qt (5.12.2) 应用程序。最近我试图连接到 mysql 8 服务器。我无法连接,并收到以下错误消息:
Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.
经过一些挖掘,我发现问题是因为 mysql 8 中实施的新加密。
此问题的一个解决方法是将服务器设置为旧版身份验证方法。
有没有不切换回旧认证的解决方案?
有 2 个可能的问题会导致此问题。
- 您正在使用旧方法并使用
QMYSQL
驱动程序连接
MySQL Connector/C (libmysqlclient.dll) 不支持的连接器
MySQL8 和新的身份验证方法。
- 第二种方法是将
QODBC
驱动程序与
不支持新身份验证的旧版本(<8.0)
方法。
您可以通过切换或升级到最新的 QODBC
驱动程序轻松解决此问题。您可以从 MySQL download page 下载最新版本。通过这个小示例和正确的连接器,它将起作用。
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};Server=example.com;Database=test;Uid=user;Port=3306;Pwd=password;WSID=.");
if (!db.open()) {
qDebug() << db.lastError().text();
} else {
qDebug("success");
}
我正在开发一个可以连接到 mysql 服务器的 qt (5.12.2) 应用程序。最近我试图连接到 mysql 8 服务器。我无法连接,并收到以下错误消息:
Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.
经过一些挖掘,我发现问题是因为 mysql 8 中实施的新加密。
此问题的一个解决方法是将服务器设置为旧版身份验证方法。
有没有不切换回旧认证的解决方案?
有 2 个可能的问题会导致此问题。
- 您正在使用旧方法并使用
QMYSQL
驱动程序连接 MySQL Connector/C (libmysqlclient.dll) 不支持的连接器 MySQL8 和新的身份验证方法。 - 第二种方法是将
QODBC
驱动程序与 不支持新身份验证的旧版本(<8.0) 方法。
您可以通过切换或升级到最新的 QODBC
驱动程序轻松解决此问题。您可以从 MySQL download page 下载最新版本。通过这个小示例和正确的连接器,它将起作用。
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};Server=example.com;Database=test;Uid=user;Port=3306;Pwd=password;WSID=.");
if (!db.open()) {
qDebug() << db.lastError().text();
} else {
qDebug("success");
}