Ответы:
В основном, как сортировать и сравнивать строки.
Примеры:
Сравнение:
Сортировка:
Эквивалентность специальных символов
Немного SQL (SQL Server 2008+)
DECLARE @foo TABLE (bar varchar(2))
INSERT @foo VALUES ('z'), ('æ'), ('ø'), ('å'), ('ss'), ('ß'), ('a'), ('ä')
SELECT * FROM @foo ORDER BY bar COLLATE Finnish_Swedish_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Norwegian_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Latin1_General_100_CS_AS --german (western europe) and default
SELECT * FROM @foo ORDER BY bar COLLATE German_PhoneBook_100_CS_AS
«Сортировка», вероятно, лучше всего определяется на etymology.com,
конец 14 в., «акт объединения и сравнения»
Он не изменился за последние 600 лет. «Разобрать» означает «собрать вместе», и, будь то порядок книг, в хронологическом порядке или иным образом в базе данных, все одинаково.
Что касается компьютерной науки, то мы отделяем механизм хранения от упорядочения . Возможно, вы слышали о ASCII-бетикале . Это относится к сравнению на основе двоичного кодирования символов ASCII. В этой системе хранение и сопоставление - это два в одном. Если ASCII-стандартизированное «кодирование» когда-либо изменялось, «сопоставление» (порядок) также изменилось бы.
POSIX начал ломать это с LC_COLLATE
. Но когда мы перейдем на Unicode, появился консорциум для стандартизации сортировки: ICU.
В спецификации SQL есть два расширения для обеспечения сортировки,
F690
: «Поддержка сортировки:
Включает в себя collation name
, collation clause
, collation definition
и drop collation
.
F692
: Расширенная поддержка сортировки,
Включает в себя присоединение другого сопоставления по умолчанию к столбцу в схеме.
По сути, они предоставляют возможность сортировки CREATE
и DROP
сопоставления, их определения для операторов и сортировок, а также определения значений по умолчанию для столбцов.
Для получения дополнительной информации о том, что SQL может предложить проверить,
Вместо того, чтобы вставлять ограниченный пример, вот набор тестов PostgreSQL, он довольно обширный. Проверьте хотя бы первую ссылку и поищите'Türkiye' COLLATE "tr-x-icu" ILIKE '%KI%' AS "false"
collate.icu.utf8.out
collate.linux.utf8.out
collate.out
Вероятно, не стоит проверять, но я разместил его здесь для полноты, скучных проверок POSIX.