无法连接MatrixOne(来自GitHub)

问题描述 投票:0回答:1

使用github.com/go-sql-driver/mysql驱动连接matrixone时,使用默认用户root连接工作正常,但尝试使用account:username:role模式连接失败,导致错误:

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
    }
}
database go
1个回答
0
投票

包含租户名称时连接失败,因为用户名中包含冒号(:),而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
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.