Beego连接MySQL需严格满足三要素:必须导入_ "github.com/go-sql-driver/mysql"触发驱动注册;DSN须含tcp(127.0.0.1:3306)、charset=utf8mb4、parseTime=true&loc=Local;且RegisterDataBase必须在RegisterModel和RunSyncdb之前调用。

Beego 连接 MySQL 不是「配个地址就能用」,关键在三处:驱动导入、DSN 构造、ORM 初始化顺序。漏掉任一环都会报 driver: unknown driver "mysql" (forgotten import?) 或 invalid connection。
必须导入 github.com/go-sql-driver/mysql 且用下划线别名
Beego 的 ORM 不自带 MySQL 驱动,只是调用接口。你得显式导入并触发 init() 注册驱动:
-
import _ "github.com/go-sql-driver/mysql"—— 下划线不可省,否则驱动不注册 - 如果用的是 Beego v2(
github.com/beego/beego/v2),驱动包路径不变,仍用上面这个导入方式 - 没导入时运行会 panic,错误信息里一定带
unknown driver "mysql",不是配置问题,先查这行
DSN 字符串必须含 tcp(…) 和 charset=utf8mb4
Beego ORM 对 DSN 解析较严格,裸地址如 root:pass@/dbname 在新版 MySQL(8.0+)或启用了 strict mode 时大概率失败:
- 正确格式:
root:password@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=true&loc=Local -
tcp(...)显式声明协议和端口,避免 Unix socket 或默认端口歧义 -
charset=utf8mb4而非utf8,后者在 MySQL 8 中已被弃用,且不支持 emoji -
parseTime=true和loc=Local必须配对,否则time.Time字段读写会出错(比如变成零值或 panic)
orm.RegisterDataBase 必须在 orm.RegisterModel 之前调用
初始化顺序错乱会导致模型注册失败,后续 QueryTable 找不到表结构:
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- 先
orm.RegisterDataBase("default", "mysql", dsn) - 再
orm.RegisterModel(new(User), new(Post)) - 最后才调
orm.RunSyncdb("default", false, true)或orm.RunCommand() - 如果在
init()里注册模型,但数据库还没注册,RunSyncdb会静默跳过建表 —— 表根本不会出现,也不报错
调试阶段务必开启 orm.Debug = true
Beego ORM 默认不输出 SQL,出错时只告诉你「no rows in result set」这类模糊提示:
- 在
init()中加一行orm.Debug = true,所有生成的 SQL 和参数都会打到 stdout - 特别注意日志里是否出现
SELECT ... FROM `user`这样的反引号包裹表名 —— Beego 默认用反引号,如果你的表名含大写或特殊字符,又没在 struct tag 里用table("User")显式指定,就可能查不到 - 建表失败时,看 debug 日志末尾有没有
CREATE TABLE语句;没有,说明模型根本没注册成功
最常被忽略的是 DSN 中的 parseTime=true&loc=Local 组合,以及驱动导入时忘了下划线。这两处一错,连连接都建立不了,更别说读写数据了。










