【问题标题】:What does the COLLATE keyword do when creating a sqlite index?创建 sqlite 索引时,COLLATE 关键字有什么作用?
【发布时间】:2010-10-22 10:33:12
【问题描述】:

根据sqlite3 documentation

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

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

【问题讨论】:

    标签: sql sqlite indexing collate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      二进制排序规则逐字节比较您的字符串,就像在 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
      

      【讨论】:

        猜你喜欢
        • 2011-06-29
        • 1970-01-01
        • 2014-09-17
        • 2014-03-06
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        相关资源
        最近更新 更多