创建sqlite索引时,COLLATE关键字是用来做什么的?

18
根据 sqlite3文档
在每个列名后面的COLLATE子句定义了该列中文本条目所使用的排序序列。默认的排序序列是在CREATE TABLE语句中为该列定义的排序序列。如果没有定义其他排序序列,则使用内置的BINARY排序序列。
排序序列是什么,BINARY排序序列又是什么呢?
2个回答

7

这是SQL引擎内部排序数据的方式。二进制排序(Binary Collation)按照字面意思进行比较。通常它是最快的排序方法,虽然我从未量化过,因为它检查位模式,这意味着它对大小写和重音符号敏感。


6

二进制排序按字节比较您的字符串,就像在Unicode表中一样。例如:A、B、a、b。 不区分大小写(NOCASE)的顺序是:a、A、b、B。

二进制排序的优点在于速度快,因为字符串比较非常简单/快速。在一般情况下,使用二进制索引可能无法产生预期的排序结果;但是,对于精确匹配,它们可以很有用。

COLLATE NOCASE 也会影响区分大小写的查询。

如果您有一个包含这些值的列:'aa'、'aA'

select * from table where col = 'aa'

如果您使用 COLLATE NOCASE 创建了列,则返回 'aa' 和 'aA'。否则,如果未指定,则仅返回 'aa'。您还可以在查询中指定它(这比使用 COLLATE NOCASE 创建列要慢)。
select * from table where col = 'aa' COLLATE NOCASE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接