Что делает ключевое слово COLLATE при создании индекса sqlite?

по словам документация и sqlite3,

предложение COLLATE после каждого имя столбца определяет упорядоченной последовательность, используемая для текстовых записей в этом колонна. Последовательность сортировки по умолчанию определена ли последовательность сортировки для этот столбец в таблице CREATE заявление. Или если нет последовательности сортировки не определено, встроенный Используется двоичная последовательность сортировки.

Что делает последовательность сортировки, и что такое бинарная последовательность сортировки?

2 ответов


Это способ, которым SQL engine упорядочивает данные внутри. Двоичная сортировка делает то, что она предлагает, она делает двоичное сравнение. Обычно это самая быстрая сортировка, хотя я никогда не оценивал ее, поскольку она проверяет битовые Шаблоны, что означает, что она нечувствительна к регистру и акценту.


двоичная сортировка сравнивает строку байт за байтом, как в таблице 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