在使用 Go 1.20 连接 MySQL 8.0 数据库时,默认的认证插件已经发生了改变。MySQL 8.0 引入了一个新的默认身份验证插件,称为 caching_sha2_password。
要在 Go 中使用该认证插件连接 MySQL 8.0,请确保你的 Go 程序依赖于 github.com/go-sql-driver/mysql 包,并按照以下方式设置连接字符串:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 创建数据库连接
db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname?tls=false")
if err != nil {
panic(err.Error())
}
defer db.Close()
// 连接数据库
err = db.Ping()
if err != nil {
panic(err.Error())
}
// 执行查询或其他操作
}
请将 "user:password@tcp(localhost:3306)/dbname" 替换为实际的数据库用户名、密码、主机和数据库名称。
注意:由于新版本的 MySQL 客户端默认启用了 SSL/TLS 加密通信,但是 github.com/go-sql-driver/mysql 目前还不支持与 MySQL 8.0 使用 TLS 连接。因此,在连接字符串末尾添加 ?tls=false 可以禁用 TLS 连接。如果需要启用 TLS 连接,请考虑使用其他第三方 MySQL 驱动程序,如 github.com/go-sql-driver/mysql 的 fork 版本 github.com/go-sql-driver/mysql@v1.7.0,或者等待原始驱动程序的更新。
内容由零声教学AI助手提供,问题来源于学员提问




