golang postsql 无法插入 text format for varchar (OID 1043): cannot find encode plan?

数据库ddl

CREATE TABLE "public"."menu" (
  "id" int4 NOT NULL GENERATED ALWAYS AS IDENTITY (
INCREMENT 1
MINVALUE  1
MAXVALUE 2147483647
START 1
),
  "title" varchar(255) COLLATE "pg_catalog"."default",
  "router" varchar(255) COLLATE "pg_catalog"."default",
  "state" varchar(255) COLLATE "pg_catalog"."default",
  "sort" int4,
  "icon" varchar(255) COLLATE "pg_catalog"."default",
  "created_at" timestamp(6),
  "updated_at" timestamp(6),
  "sid" int4 NOT NULL DEFAULT 0
)
;

ALTER TABLE "public"."menu" 
  OWNER TO "postgres";

COMMENT ON COLUMN "public"."menu"."title" IS '标题';

COMMENT ON COLUMN "public"."menu"."router" IS '路由';

COMMENT ON COLUMN "public"."menu"."state" IS '状态';

COMMENT ON COLUMN "public"."menu"."sort" IS '排序';

COMMENT ON COLUMN "public"."menu"."icon" IS '图标';

COMMENT ON TABLE "public"."menu" IS '菜单表';

数据库链接

    dsn := "host=xxxx user=postgres password=xxxxx dbname=xxxx port=5432 sslmode=disable TimeZone=Asia/Shanghai"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err == nil {
        Db = db
    }

struct

type MenuModel struct {
    Id         int       `gorm:"column:id" json:"id"`
    Title      string    `gorm:"column:title" json:"title"`
    Router     string    `gorm:"column:router" json:"router"`
    Sid        int       `gorm:"column:sid" json:"sid"`
    State      int       `gorm:"column:state" json:"state"`
    Sort       int       `gorm:"column:sort" json:"sort"`
    Icon       string    `gorm:"column:icon" json:"icon"`
    Created_at time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"`
    Updated_at time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"`
}

插入操作

InitDb()
    menu := MenuModel{
        Title:  "1",
        Router: "1",
        Sid:    1,
        State:  1,
        Sort:   1,
        Icon:   "1",
    }
    Db.Create(&menu)
    fmt.Println(menu.Id)

报错

failed to encode args[3]: unable to encode 1 into text format for varchar (OID 1043): cannot find encode plan

[rows:0] INSERT INTO "menu" ("title","router","sid","state","sort","icon","created_at","updated_at") VALUES ('1','1',1,1,1,'1','2023-01-29 19:37:38.34','2023-01-29 19:37:38.34') RETURNING "id"

以上报错,只会在gorm 插入的时候报错,报错的sql,是可以正常插入到数据库,gorm 也能正常读取!

请问这个问题是哪里的问题?怎么处理?

阅读 5.3k
1 个回答
failed to encode args[3]: unable to encode 1 into text format for varchar

报错信息很清晰,第三个字段编码时出错,为什么出错,无法将数字1编码为varchar

检查为什么会出现数字1

Ops,你把结构体的State定义成int了,换成string试试看。


以及你这个gormcolumn标签也有点多余,gorm会自动生成列名:

GORM 倾向于约定优于配置 默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题