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 个可能的问题会导致此问题。

  1. 您正在使用旧方法并使用 QMYSQL 驱动程序连接 MySQL Connector/C (libmysqlclient.dll) 不支持的连接器 MySQL8 和新的身份验证方法。
  2. 第二种方法是将 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");
}