排序规则

SQLite 在比较 TEXT 值时使用排序序列确定顺序和相等性。 可以指定在 SQL 查询中创建列时或是对每个操作要使用的排序规则。 SQLite 在默认情况下包含三种排序序列。

排序规则 描述
RTRIM 忽略尾随空格
NOCASE 对于 ASCII 字符 A-Z 不区分大小写
BINARY 区分大小写。 直接比较字节

自定义排序规则

还可以使用 CreateCollation 定义自己的排序序列或替代内置排序序列。 下面的示例演示如何替代 NOCASE 排序规则以支持 Unicode 字符。 GitHub 上提供了完整示例代码

connection.CreateCollation("NOCASE", (x, y) => string.Compare(x, y, ignoreCase: true));

var queryCommand = connection.CreateCommand();
queryCommand.CommandText =
@"
    SELECT count()
    FROM greek_letter
    WHERE value = 'λ' COLLATE NOCASE
";
var oCount = queryCommand.ExecuteScalar();
var count = (oCount is not null) ? (int)oCount : -1;

Like 运算符

SQLite 中的 LIKE 运算符不遵循排序规则。 默认实现的语义与 NOCASE 排序规则相同。 只对 ASCII 字符 A 到 Z 不区分大小写。

可以使用以下 pragma 语句轻松地使 LIKE 运算符区分大小写:

PRAGMA case_sensitive_like = 1

有关替代 LIKE 运算符的实现的详细信息,请参阅用户定义的函数

请参阅