代码拉取完成,页面将自动刷新
// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本,
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3
package mysql
import (
"database/sql"
"fmt"
"net/url"
"strings"
gdb "gitee.com/go_888/goframe/database/gdb"
gcode "gitee.com/go_888/goframe/errors/gcode"
gerror "gitee.com/go_888/goframe/errors/gerror"
gregex "gitee.com/go_888/goframe/text/gregex"
)
// X底层Open 创建并返回一个底层的 sql.DB 对象,用于 MySQL。
// 注意,它将时间.Time 参数默认转换为本地时区。
// md5:341df118003c304e
func (d *Driver) X底层Open(config *gdb.X结构_配置) (db *sql.DB, err error) {
var (
source string
underlyingDriverName = "mysql"
)
// [用户名[:密码]@][协议[(地址)]]/数据库名[?参数1=值1&...&参数N=值N]. md5:493f32d70b15315e
if config.Link != "" {
// ============================================================================
// 从 v2.2.0 版本开始已废弃。
// ============================================================================
// md5:73505fc2089cb531
source = config.Link
// 自定义在运行时更改架构。 md5:69ce0e441b271151
if config.Name != "" {
source, _ = gregex.X替换文本(`/([\w\.\-]+)+`, "/"+config.Name, source)
}
} else {
// 待办事项:在未指定字符集时不要设置字符集(在v2.5.0版本中). md5:2c9a899c402d1e44
source = fmt.Sprintf(
"%s:%s@%s(%s:%s)/%s?charset=%s",
config.User, config.Pass, config.Protocol, config.Host, config.Port, config.Name, config.Charset,
)
if config.Timezone != "" {
if strings.Contains(config.Timezone, "/") {
config.Timezone = url.QueryEscape(config.Timezone)
}
source = fmt.Sprintf("%s&loc=%s", source, config.Timezone)
}
if config.Extra != "" {
source = fmt.Sprintf("%s&%s", source, config.Extra)
}
}
if db, err = sql.Open(underlyingDriverName, source); err != nil {
err = gerror.X多层错误码并格式化(
gcode.X变量_CodeDbOperationError, err,
`为驱动 "%s" 使用数据源 "%s" 调用 sql.Open 失败`, underlyingDriverName, source,
)
return nil, err
}
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。