当使用github.com/go-sql-driver/mysql驱动程序连接到matrixone时,使用默认用户根连接工作正常,但try 使用帐户:用户名:角色模式连接失败,导致错误:

select failed: err[Error 20101 (HY000): internal error: there is no user.
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "net/url"
)

func main() {
    _, err := sql.Open("mysql","account:admin:role:xxx@tcp(192.168.110.210:6001)/ssb")
    if err != nil {
        fmt.Printf("connect failed: err[%v]", err)
        return
    }
}

推荐答案

当包含租户名称时,连接失败,因为用户名包含逗号(:),并且在Go语言中,当连接到MatrixOne数据库时,用户名和密码用逗号分隔.

因此,当用户名包含逗号时,会导致逗号之前的租户名称被解释为系统租户"sys"用户名,从而导致连接失败.为了避免此问题,您可以使用url.QueryEscape来编码用户名,然后连接字符串.

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "net/url"
)

func main() {
    username := "account:admin:role"
    encodeUsername := url.QueryEscape(username)
    _, err := sql.Open("mysql", encodeUsername+":xxx@tcp(192.168.110.210:6001)/ssb")
    if err != nil {
        fmt.Printf("connect failed: err[%v]", err)
        return
    }
}

Database相关问答推荐

使用 Npgsql 执行年龄查询并在 .NET 应用程序中返回结果?

如何在 ubuntu 中使用脚本添加带有连字符的数据库名称

MYSQL CASE 语句多条件

我们如何使用 Hibernate 和 JPA 调用存储过程?

查询最后一天、上周、上个月SQLite

在 postgresql 中将列从字符串更改为字符串数组

skip bad record in redshift data load

Oracle 数据库统计信息应该多久运行一次?

库存数据库的最佳 struct

matlab 数据文件到 pandas DataFrame

我们如何保存在 sqlite3 中创建的数据库

如何用 SQL 思考?

在 Rails 中销毁/删除数据库

PDO SQL 状态00000但仍然错误?

Sqlite 和 Python - 使用 fetchone() 返回字典?

为 django 模型自动创建数据的工具

最小覆盖和功能依赖

复制没有 LOCK 权限的 postgres 数据库

Data Mapper 是不是比 Active Record 更现代的趋势

如何在 Java 中检测 SQL 表的存在?