Ответ 1
Основная точка сортировки базы данных - это определение того, как данные сортируются и сравниваются.
Чувствительность к строкам сравнения строк
SELECT "New York" = "NEW YORK";`
вернет true для нечувствительной к регистру сортировки; false для чувствительного к регистру.
Какую сортировку можно задать суффикс _ci
и _cs
в имени сортировки. _bin
сопоставления выполняют двоичные сравнения (строки должны быть на 100% идентичны).
Сравнение символов умляутов/акцентов
сопоставление также определяет, рассматриваются ли акцентированные символы как их латинские базовые копии в сравнении строк.
SELECT "Düsseldorf" = "Dusseldorf";
SELECT "Èclair" = "Eclair";
вернет true в первом случае; false в последнем. Вам нужно будет прочитать каждое описание сопоставления, чтобы узнать, что именно.
Сортировка строк
Сопоставление влияет на способ сортировки строк.
Например,
-
Umlauts
Ä Ö Ü
находятся в конце алфавита в финском/шведском алфавитеlatin1_swedish_ci
-
они обрабатываются как
A O U
в немецкой сортировке по DIN-1 (latin_german1_ci
) -
и
AE OE UE
в немецкой сортировке по DIN-2 (latin_german2_ci
). (сортировка телефонной книги) -
В
latin1_spanish_ci
, "-" (n-тильда) является отдельной буквой между "n" и "o".
Эти правила приведут к другим порядкам сортировки, когда используются нелатинские символы.
Использование сопоставлений во время выполнения
Вам нужно выбрать сортировку для своей таблицы и столбцов, но если вы не возражаете против производительности, вы можете принудительно выполнить операции базы данных в определенной сортировке во время выполнения, используя ключевое слово COLLATE
.
Это сортирует table
столбцом name
, используя немецкие правила сортировки по DIN-2:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;
Использование COLLATE
во время выполнения будет иметь последствия для производительности, так как каждый столбец должен быть преобразован во время запроса. Поэтому дважды подумайте, прежде чем применять это делать большие массивы данных.
Справочник по MySQL: