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

如何阻止GORM将查询语句中的列名自动转换为小写?

GORM查询列名自动转小写问题解决方案

问题原因

GORM 默认使用的命名策略会自动将查询语句中的标识符(表名、列名)转换为蛇形全小写格式,对于 PostgreSQL 这类对标识符大小写敏感的数据库,如果你建表时通过双引号保留了列名的驼峰格式(如createdAt),就会出现列名不匹配的报错。

解决方案

方案1:全局关闭自动转小写配置

初始化GORM实例时,配置命名策略的NoLowerCase参数为true,全局关闭自动转小写逻辑,适合全库都使用驼峰命名列的场景:

import "gorm.io/gorm/schema"

// 初始化DB时添加配置
db, err := gorm.Open(postgres.Open(你的DSN), &gorm.Config{
  NamingStrategy: schema.NamingStrategy{
    NoLowerCase: true,
  },
})

配置完成后你原来的查询代码不需要修改即可正常运行。

方案2:单条查询手动保留大小写

如果不想修改全局配置,只需要给单条查询的列名加上双引号包裹,并用gorm.Expr包裹查询条件避免GORM改写:

response := db.Where(gorm.Expr(`"createdAt" BETWEEN ? AND ?`, today, tomorrow)).Find(&orders)

方案3:通过模型标签绑定列名

在定义模型结构体时,通过gorm:"column:xxx"标签显式指定列名,查询时使用结构体字段作为条件,GORM会自动匹配标签指定的列名:

type Order struct {
  CreatedAt time.Time `gorm:"column:createdAt"`
  // 其他字段...
}

// 查询时可直接用字段名构造条件,GORM会自动匹配正确列名
response := db.Where("CreatedAt BETWEEN ? AND ?", today, tomorrow).Find(&orders)

内容的提问来源于stack exchange,提问作者José Mendoza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03