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

使用GORM搭配SQLite驱动,如何实现大小写不敏感的唯一列校验?

实现方案

1. 数据库层面创建不区分大小写的唯一约束

SQLite默认字符串比较区分大小写,要实现"User1"和"user1"视为重复,需给Name字段添加不区分大小写的唯一索引。通过GORM的结构体标签即可配置:

type YourModel struct {
    gorm.Model
    Name string `gorm:"type:text;uniqueIndex:idx_name_ci,collate:NOCASE"`
}

这个配置会让SQLite生成基于NOCASE排序规则的唯一索引,插入"User1"后再插入"user1"会触发唯一约束错误,实现重复值判断,同时原始字符串格式(比如"User1")会被完整保存。

2. 查询时的不区分大小写匹配

如果需要查询时忽略大小写匹配(比如查找所有名为"user1"的记录,包含"User1"、"USER1"),可以用两种方式:

  • 借助LOWER()函数统一转换为小写对比:
import "strings"

var models []YourModel
db.Where("LOWER(name) = ?", strings.ToLower("user1")).Find(&models)
  • 直接利用索引的NOCASE特性简化查询:
db.Where("name = ? COLLATE NOCASE", "user1").Find(&models)

注意事项

  • SQLite的NOCASE仅对ASCII字符生效,若涉及非ASCII字符(如中文、特殊符号)需额外处理,多数场景下可满足需求。
  • 执行GORM迁移时,会自动根据结构体标签生成对应的索引SQL,确保迁移完成后索引生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:52