SQLite中PRAGMA case_sensitive_like的替代方案及大小写切换咨询
SQLite 3.44.0弃用PRAGMA case_sensitive_like后的替代方案
LIKE运算符的替代方案
之前的PRAGMA case_sensitive_like因会触发数据库完整性检查报错被弃用,现在可以用两种方式灵活控制LIKE的大小写行为:
- 单查询精准控制:使用COLLATE子句
直接在LIKE条件后指定排序规则,不会影响全局或数据库完整性:- 大小写敏感查询:
SELECT X.A FROM X WHERE A LIKE ? COLLATE BINARY; - 大小写不敏感查询:
SELECT X.A FROM X WHERE A LIKE ? COLLATE NOCASE;
- 大小写敏感查询:
- 全局默认规则设置
如果想让所有未特殊指定的LIKE查询统一遵循某大小写规则,可在数据库连接阶段设置默认排序规则为NOCASE或BINARY,无需在每个查询里重复写COLLATE子句。
GLOB运算符的大小写控制
GLOB本身默认是大小写敏感的(基于SQLite二进制比较规则),切换行为可按以下方式处理:
- 要实现大小写不敏感的GLOB,你提到的
lower(A) GLOB lower(?)是直接有效的写法,能达到和原PRAGMA关闭时类似的效果。 - 要保持大小写敏感,直接使用
A GLOB ?即可,无需额外处理。
全局切换的替代思路
如果想复刻原PRAGMA那种一键切换全局大小写敏感的体验:
- 对于LIKE,通过连接配置设置默认排序规则就能实现全局统一。
- 对于GLOB,因为没有原生全局开关,建议在应用层封装查询逻辑,或统一处理参数和字段的大小写转换,避免重复编写
lower()转换代码。
内容的提问来源于stack exchange,提问作者Dave Carpeneto
相关产品推荐
相关产品推荐

