GORM golang create不工作,出现mariadb错误

amrnrhlw  于 2022-11-08  发布在  Go
关注(0)|答案(2)|浏览(215)

我在学习go的时候,尝试将mariadb集成到我的todo应用程序中。我决定使用gorm。我得到的错误是

2022/10/16 21:47:49 C:/Users/xxx/go/src/go-todo-app/server/main.go:44 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'RETURNING `id`,`id`' at line 1

[0.000ms] [rows:0] INSERT INTO `todos` (`created_at`,`updated_at`,`deleted_at`,`title`,`done`,`body`) VALUES ('2022-10-16 21:47:49.1','2022-10-16 21:47:49.1',NULL,'Testing',0,'Finish Tutorial') RETURNING `id`,`id`

对于我的http服务器,我使用gofiber v2。

app.Post("/api/todos", func(c *fiber.Ctx) error {
        todo := &Todo{}

        if err := c.BodyParser(todo); err != nil {
            return err
        }

        newTodo := &Todo{
            Title: todo.Title,
            Body: todo.Body,
            Done: 0,
        }
        db.Create(&newTodo) // fails here

        var todos []Todo
        db.Find(&todos)

        return c.JSON(todos)
    })

我的Todo结构看起来像这样:

type Todo struct {
    gorm.Model
    ID int `json:"id"`
    Title string `json:"title"`
    Done int `json:"done"`
    Body string `json:"body"`
}
cpjpxq1n

cpjpxq1n1#

在旧版MariaDB中显式禁用返回将防止出现语法错误:

gorm.Open(mysql.New(mysql.Config{Conn: conn, DisableWithReturning: true}))

gorm mysql驱动程序不应该在没有版本检查的情况下启用WithReturning。这是一个错误,应该报告给hem。

u5rb5r59

u5rb5r592#

问题解决了。问题是我用Xampp for windows(PHP 7.4)安装了MariaDb。在那个版本中,RETURNING语句不适用于MariaDb。我按照此指南安装了MySQL 5.7而不是MariaDb。How can I change MariaDB to MySQL in XAMPP?

相关问题