Что означает сопоставление?


138

Что означает сопоставление в SQL и что оно делает?


2
@gbn: кстати, сортировка работает очень похожим образом как в MSSQL, так и в MySQL.
Писквор покинул здание


@Piskvor: за исключением того, что некоторые параметры сортировки mySql (например, UTF8) недоступны в MSSQL: msdn.microsoft.com/en-us/library/ms144250.aspx
CB

@CB: не отрицая этого; сходство идет глубже, чем (не) поддерживаемые кодировки.
Писквор покинул здание

Ответы:


60

Сортировку можно просто рассматривать как порядок сортировки.

В английском (и это странный кузен, американский) сопоставление может быть довольно простым делом, состоящим из упорядочения по коду ASCII.

Как только вы попадаете на эти странные европейские языки со всеми их акцентами и другими функциями, сортировка меняется. Например, хотя различные акцентированные формы aмогут существовать в разных кодовых точках, все они могут быть отсортированы, как если бы они были одной и той же буквой.


4
Различные акценты , как правило , означает , что они должны быть отсортированы , как если бы они были разные буквы - например e, ë, é, ěи è может быть различные буквы для целей упорядочения (но , возможно , та же буква при поиске, черт тех сумасшедших европейцев;)).
Писквор покинул здание

1
@Piskvor: разве координаты в вашей информации не указывают на определенную страну, используя алфавит с 42буквами, 15в них есть диакритические знаки?
Quassnoi

4
@Quassnoi: ну да, а? Я намекаю на то, что я не сумасшедший? ; о) (хотя, слава Богу, за Unicode, я бы сошел с ума, если бы мне все еще приходилось работать с национальными кодировками)
Писквор покинул здание

3
@Piskvor: извини, извини, ты совершенно сумасшедший! :)
Quassnoi

Это только для сортировки или также для where st= 'aaa'?
Ройи Намир

42

Кроме того, «акцентированные буквы сортируются по-разному, чем безакцентированные» в некоторых западноевропейских языках, необходимо учитывать группы букв, которые иногда также сортируются по-разному.

Традиционно на испанском языке «ch» считался буквой сам по себе, то же самое с «ll» (оба из которых представляют одну фонему), поэтому список сортировался бы так:

  • Кабальо
  • Синко
  • Coche
  • Charco
  • шоколад
  • chueco
  • цоколь
  • (...)
  • Lampara
  • Luego
  • llanta
  • Lluvia
  • Мадера

Обратите внимание, что все слова, начинающиеся с одиночного c, идут вместе, кроме слов, начинающихся с ch, которые идут после них, то же самое со словами, начинающимися с ll, которые идут после всех слов, начинающихся с одного l . Это порядок, который вы увидите в старых словарях и энциклопедиях, иногда даже сегодня очень консервативными организациями.

Королевская академия языка изменила это, чтобы упростить размещение испанского языка в компьютерном мире. Тем не менее, - по-прежнему считается буквой, отличной от n, и идет после нее и до o . Так что это правильно упорядоченный список:

  • Намибия
  • número
  • нанду
  • Nu
  • Обра
  • Охо

Выбрав правильное сопоставление, вы автоматически сделаете все это за вас :-)


Итак, сопоставление весьма полезно для правильной сортировки, но все же полезно для сравнений? Например, я бы хотел, чтобы «нанду» и «нанду» выступали как равные по практическим соображениям ... Может ли механизм сопоставления помочь мне с этой задачей?
CB

@CB: Если вы имеете в виду что-то вроде выбора всех строк, где значение столбца равно «Aéreo», а SQL S. возвращает строки с «aereo», «aereó», «AerEO» и т. П. - да, устанавливая конкретное сопоставление только для запрос может сделать это. Тем не менее, у вас будут проблемы с производительностью, если это сопоставление сильно отличается от исходного в базе данных. И если вы используете временные таблицы, вы также должны отслеживать параметры сортировки tempdb ... Но вы можете это сделать.
Джо Пинеда

В таком случае, не могли бы вы объяснить немного больше? В частности, сможет ли это сделать простой запрос «ВЫБРАТЬ слово из теста ГДЕ слово НРАВИТСЯ« nandu »? И какое сопоставление я должен использовать, чтобы это работало? (Обратите внимание, что я обеспокоен диакритическими знаками, а не только акцентами ...)
CB

2
@CB взгляните на «AI» или «AS» часть сопоставления (Accent Insensitive и Accent Sensitive).
Дастин Кендалл

14

Правила, которые говорят, как сравнивать и сортировать строки: порядок букв; имеет ли значение дело, имеют ли значение диакритические знаки и т. д.

Например, если вы хотите, чтобы все буквы были разными (скажем, если вы храните имена файлов в них UNIX), вы используете UTF8_BINсортировку:

SELECT  'A' COLLATE UTF8_BIN = 'a' COLLATE UTF8_BIN

---
0

Если вы хотите игнорировать различия регистра и диакритики (скажем, для поисковой системы), используйте UTF8_GENERAL_CIсопоставление:

SELECT  'A' COLLATE UTF8_GENERAL_CI = 'ä' COLLATE UTF8_GENERAL_CI

---
1

Как вы можете видеть, это сопоставление (правило сравнения) рассматривает заглавные Aи строчные äбуквы одинаково, игнорируя регистр и диакритические различия.


10

Сортировка определяет, как вы сортируете и сравниваете строковые значения

Например, он определяет, как бороться с

  • акценты (и äàaт. д.)
  • case ( Aa)
  • языковой контекст:
    • Во французском сопоставлении cote < côte < coté < côté.
    • В SQL Server Latin1 по умолчанию cote < coté < côte < côté
  • ASCII сортирует (двоичное сопоставление)

5

Сличение означает присвоение некоторого порядка для символов в алфавите, скажем, ASCII или Unicode и т. Д.

Предположим, у вас есть 3 символа в вашем алфавите - {A, B, C}. Вы можете определить некоторые примеры сопоставления для него, назначив интегральные значения для символов

  1. Пример 1 = {A = 1, B = 2, C = 3}
  2. Пример 2 = {C = 1, B = 2, A = 3}
  3. Пример 3 = {B = 1, C = 2, A = 3}

На самом деле, вы можете определить! сопоставления по алфавиту размера n. Учитывая такой порядок, различные процедуры сортировки, такие как сортировки строк LSD / MSD, используют его для сортировки строк.


3

Сортировка определяет, как ваши данные сортируются и сравниваются. Это очень важно в отношении интернационализации, например, как вы сортируете японские кандзи?

Если вы используете Google Collation и SQL Server, вы найдете множество статей, обсуждающих это!


3

Ссылка взята из этой статьи: сопоставление - это набор правил для сравнения символов в наборе символов. Он также правил для сортировки символов, и правильный порядок двух символов варьируется от языка к языку. Collation сравнивает две строки, например, если слово больше другого, и сортирует их соответственно.

Если вы используете набор символов «latin1», вы можете использовать сортировку «latin1_swedish_ci».

Вы должны выбрать правильное сопоставление, потому что неправильное сопоставление может повлиять на производительность вашей базы данных.


2

http://en.wikipedia.org/wiki/Collation

Сопоставление - это сбор письменной информации в стандартном порядке. (...) Алгоритм сопоставления, такой как алгоритм сопоставления Unicode, определяет порядок в процессе сравнения двух заданных символьных строк и выбора, который должен предшествовать другому.



1
Эта статья действительно объясняет все это.
Джо Пинеда

3
@ Джо Пинеда. Может быть, это действительно все объясняет, но хочет ли читатель узнать все это? Или же возможно, что читатель просто хочет получить краткий, надежный ответ, который охватывает наиболее фундаментальные и часто используемые элементы и функции сопоставления, чтобы он / она мог быстро прочитать его и возобновить работу над любой задачей, заданием или проектом, вызвавшим вопрос начинать с?
cfwschmidt

2
@TJCrowder Я ценю иронию в этом

1

Сортировка - это то, как SQL-сервер решает, как сортировать и сравнивать текст.

Смотрите MSDN .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.