为了账号安全,请及时绑定邮箱和手机立即绑定

尝试从模型创建表时出错

尝试从模型创建表时出错

Go
largeQ 2021-12-20 10:15:19
我今天开始玩 gorm,但糟糕的是遇到了一些愚蠢的错误,并坚持了一段时间。起初我在 Windows 上运行 MySQL 5 (5.0.51b) 和最新版本的 go。我确实去了 gorm 和 mysql 驱动程序,它编译没有错误并且能够连接(可能),但是每当我尝试根据声明的类型创建表时,它都会抛出一个没有信息的错误(因为错误是由 MySQL 抛出)。这是我的代码:mport (    "fmt"    _ "github.com/go-sql-driver/mysql"    "github.com/jinzhu/gorm")type User struct {    id int}func main() {    db, err := gorm.Open("mysql", "root:vertrigo@/shop?charset=utf8&parseTime=True&loc=Local")    fmt.Println(err)    a := db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})    fmt.Println(a)}所以该模型的目标是非常基本的,例如一个只有一列的表格。现在是输出:< nil > &{0x111e2230 错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 0 0x112d4060 0x112d4000 0x112d8140 0 {0x112a3f20} 假地图 [gorm:table_options:ENGINE=InnoDB' 附近使用正确的语法第一个是连接错误,这意味着它能够连接,但是查询并不是那么好,并且该错误几乎没有说明除了由 gorm 生成的 SQL 出于某种原因失败之外的任何其他内容。所以问题是是否有人知道为什么会抛出错误以及是否有任何解决方案。
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

尝试创建空表时会发生该错误,例如:


create table User() ENGINE=InnoDB

gorm生成一个空表语句,因为 User 结构的 id 字段是私有的。


更改id int为ID int。将结构字段的第一个字母大写会将其暴露给外部包。


作为次要问题,而不是仅仅打印错误:


db, err := gorm.Open(...

fmt.Println(err)

检查每个潜在错误并立即处理它们是个好主意:


db, err := gorm.Open(...

if err != nil {

    log.Fatal(err)

}

对于其他错误,与大多数 go 代码相比,gorm 的错误处理有点不寻常。您可能希望经常使用db.GetErrors()检查错误。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信