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

时间:2009-04-28 21:11:31

标签: sql sqlite indexing collate

根据sqlite3 documentation

  

每个后面的COLLATE子句   列名称定义整理   用于文本条目的序列   柱。默认整理顺序   是为其定义的整理顺序   CREATE TABLE中的该列   声明。或者如果没有整理顺序   另有定义,内置   使用BINARY整理顺序。

整理顺序的作用是什么,以及什么是BINARY整理顺序?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

二进制排序规则比较您的字符串逐字节,就像在unicode表中一样。例如:A,B,a,b。 区分大小写的顺序是: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