使用qt的mysql 8身份验证问题

Haj*_*bor 5 mysql qt mysql-8.0

我正在开发一个可以连接到 mysql 服务器的 qt (5.12.2) 应用程序。最近我尝试连接到 mysql 8 服务器。我无法连接,并收到以下错误消息:

Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

经过一番挖掘,我发现问题出在 mysql 8 中实现的新加密。

此问题的一种解决方法是将服务器设置为旧式身份验证方法。

是否有不切换回传统身份验证的解决方案?

Mat*_*abo 4

有 2 个可能的问题可能导致此问题。

  1. 您正在使用旧方法并QMYSQL使用不支持 MySQL 8 和新身份验证方法的 MySQL Connector/C (libmysqlclient.dll) 连接器与驱动程序连接。
  2. 第二种方法是您使用QODBC旧版本(<8.0)的驱动程序,该版本不支持新的身份验证方法。

您可以通过切换或升级到最新的QODBC驱动程序轻松解决此问题。您可以从 MySQL下载页面下载最新版本。通过这个小例子并使用正确的连接器,它就可以工作。

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");
}
Run Code Online (Sandbox Code Playgroud)