Что делает ключевое слово 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