在 GORM 中index标签不能和type:text或column等其他标签混合用分号分隔而且TEXT类型直接建索引会有问题。 问题分析语法错误多个标签应该用空格分隔而不是分号TEXT 类型索引限制MySQL 不允许对完整的TEXT字段直接建索引✅ 正确的写法方案一改用 VARCHAR推荐go// 消息实体train_online ObjectType string json:objectType gorm:column:object_type;type:varchar(255);index:idx_type_id,priority:1 // 消息关联实体Id train_online_id ObjectId int64 json:objectId,string gorm:column:object_id;index:idx_type_id,priority:2方案二必须用 TEXT 指定前缀长度go// 消息实体train_online ObjectType string json:objectType gorm:column:object_type;type:text;index:idx_type_id,priority:1,length:191 // 消息关联实体Id train_online_id ObjectId int64 json:objectId,string gorm:column:object_id;index:idx_type_id,priority:2方案三使用单独的索引标签更清晰go// 消息实体train_online ObjectType string json:objectType gorm:column:object_type;type:varchar(255) // 消息关联实体Id train_online_id ObjectId int64 json:objectId,string gorm:column:object_id // 在结构体末尾定义联合索引 func (YourModel) TableName() string { return your_table_name } // 或者在结构体上添加索引标记 // 使用单独的 gorm 标签更推荐gotype YourModel struct { ObjectType string gorm:column:object_type;type:varchar(255) ObjectId int64 gorm:column:object_id } // 定义索引GORM v2 支持 func (YourModel) Indexes() map[string]gorm.Index { return map[string]gorm.Index{ idx_type_id: { Columns: []string{object_type, object_id}, }, } } 关键点总结多个标签用空格分隔不是分号✅ 正确gorm:column:object_type;type:text json:objectType❌ 错误gorm:index:xxx;column:xxx;type:text然后分号分隔不同标签GORM 标签的正确格式gogorm:标签1:值1;标签2:值2 json:字段名TEXT 字段加索引需要指定 lengthgogorm:type:text;index:idx_name,length:191所以你的原写法主要问题是分号分隔了index和column、type应该是空格分隔TEXT类型需要指定length参数推荐使用方案一将type:text改为type:varchar(255)这样最简单可靠。