You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang Gorm Where子句添加*通配符报错,转义无效如何解决?

解决Gorm中MATCH AGAINST添加*通配符的语法错误问题

直接在Gorm的Where子句里写*?*会触发SQL解析错误,核心原因是你把通配符和占位符?错误地混合在了SQL模板里,导致数据库无法正确识别语法。正确的做法是先把通配符拼接到搜索文本上,再将完整字符串作为参数传入,而非在SQL语句里直接拼接通配符和占位符。

具体实现步骤:

  • 先对原始搜索关键词做处理,给前后加上*通配符
  • 在Gorm的Where条件中,使用标准的MATCH...AGAINST语法,将处理后的完整字符串作为参数传入

示例代码:

// 原始搜索关键词
searchKeyword := "目标搜索文本"
// 拼接通配符,生成符合全文检索要求的字符串
fullSearchContent := "*" + searchKeyword + "*"

// 执行Gorm查询
err := db.Where("MATCH(column1, column2) AGAINST (? IN BOOLEAN MODE)", fullSearchContent).Find(&rs.Records).Error
if err != nil {
    // 处理查询错误
}

这种方式的优势在于:Gorm会自动对传入的参数做SQL转义,既避免了注入风险,又能让*作为全文检索的通配符被数据库正确识别,不会触发语法错误。

你之前尝试的转义\*?\*或添加单引号的方式,本质上还是错误地将通配符嵌入了SQL模板,导致数据库无法正确解析占位符的位置,因此始终会抛出语法错误。

内容的提问来源于stack exchange,提问作者MrCujo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:39:54