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

And*_*rov 10 sql sqlite indexing collate

根据sqlite3文档,

每个列名后面的COLLATE子句定义用于该列中文本条目的整理顺序.默认整理顺序是在CREATE TABLE语句中为该列定义的整理顺序.或者,如果未定义整理顺序,则使用内置BINARY整理顺序.

整理顺序有什么作用,什么是BINARY整理顺序?

u07*_*7ch 6

这是sql引擎在内部订购数据的方式.Binary Collat​​ion做它的建议,它进行二进制比较.通常它是最快的排序规则,虽然我从未量化它,因为它检查位模式,这意味着它是大小写和重音不敏感.


liv*_*ove 6

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

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

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

如果您有一列包含以下值:“aa”、“aA”

select * from table where col = 'aa'
Run Code Online (Sandbox Code Playgroud)

如果您使用 COLLATE NOCASE 创建列,它将返回“aa”和“aA”。否则,如果您没有指定它,它将仅返回“aa”。

您还可以在查询中指定它(这比您使用 COLLATE NOCASE 创建列要慢)

select * from table where col = 'aa' COLLATE NOCASE
Run Code Online (Sandbox Code Playgroud)