SQL Server 2008 - Разница между типами сортировки - PullRequest
6 голосов
/ 10 февраля 2009

Я устанавливаю новый сервер SQL Server 2008, и у меня возникают некоторые проблемы с получением любой полезной информации, касающейся различных параметров сортировки. Я искал SQL Server BOL и google'ed для ответа, но не могу найти какую-либо полезную информацию.

  1. В чем разница между Windows Collation "Finnish_Swedish_100" и "Finnish_Swedish"?

    Я полагаю, что "_100" -version - это обновленное сопоставление в SQL Server 2008, но что изменилось по сравнению со старой версией, если это так?

  2. Обычно полезно включить "Accent-sensitive"? Я знаю, что это зависит от задачи и всего этого, но есть ли известные плюсы и минусы для рассмотрения?

  3. Параметры "Binary" и "Binary-code point", в каких случаях они должны быть включены?

Ответы [ 7 ]

4 голосов
/ 23 сентября 2009

Буквы ÅÄÖ / åäö не смешиваются с A и O, просто устанавливая сопоставление для AI (Accent Insensitive). Это, однако, верно для â и других «комбинаций», не являющихся частью шведского алфавита, а отдельных букв. â будет смешивать или не смешивать в зависимости от настройки.

Поскольку у меня много старых баз данных, с которыми мне все еще нужно общаться, также используя связанные серверы, я выбрал FINNISH _SWEDISH _CI _AS теперь, когда я устанавливаю SQL2008. Это было значение по умолчанию для FINNISH _SWEDISH, когда параметры сортировки Windows впервые появились в SQL Server.

3 голосов
/ 23 сентября 2009

Используйте запрос ниже, чтобы попробовать его самостоятельно.

Как видите, символы å, ä и т. Д. Не считаются акцентированными символами и сортируются в соответствии со шведским алфавитом при использовании финского / шведского сопоставления.

Однако акценты учитываются только в том случае, если вы используете сопоставление AS. Для сортировки AI их порядок неизменен, как будто не было никакого акцента.

CREATE TABLE #Test (
    Number int identity,
    Value nvarchar(20) NOT NULL
);
GO

INSERT INTO #Test VALUES ('àá');
INSERT INTO #Test VALUES ('áa');
INSERT INTO #Test VALUES ('aa');
INSERT INTO #Test VALUES ('aà');

INSERT INTO #Test VALUES ('áb');
INSERT INTO #Test VALUES ('ab');

-- w is considered an accented version of v
INSERT INTO #Test VALUES ('wa');
INSERT INTO #Test VALUES ('va');
INSERT INTO #Test VALUES ('zz');
INSERT INTO #Test VALUES ('åä');
GO

SELECT Number, Value FROM #Test ORDER BY Value COLLATE Finnish_Swedish_CI_AS;
SELECT Number, Value FROM #Test ORDER BY Value COLLATE Finnish_Swedish_CI_AI;
GO

DROP TABLE #Test;
GO
3 голосов
/ 10 февраля 2009

_100 указывает последовательность сортировки, новую в SQL Server 2008, те, у которых _90, предназначены для 2005, а те, у которых нет суффикса, - 2000. Я не знаю, в чем различия, и не могу найти никакой документации. Если вы не выполняете связанные запросы к другому серверу SQL другой версии, у меня возникнет соблазн пойти с _100. Извините, я не могу помочь с различиями.

2 голосов
/ 10 февраля 2009

Для ответа на вопрос 3 (информация взята с MSDN ; формулировка их, формат мой):

Двоичный (_BIN):

  • Сортирует и сравнивает данные в таблицах SQL Server на основе битовых комбинаций, определенных для каждого символа.
  • Двоичный порядок сортировки чувствителен к регистру и акценту.
  • Двоичный также самый быстрый порядок сортировки.
  • Если этот параметр не выбран, SQL Server следует правилам сортировки и сравнения, как определено в словарях для соответствующего языка или алфавита.

Двоичный код (_BIN2):

  • Для данных Unicode: сортирует и сравнивает данные в таблицах SQL Server на основе кодовых точек Unicode.
  • Для данных не в Юникоде: будут использоваться сравнения, идентичные двоичным сортировкам.

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

Для получения дополнительной информации см. Рекомендации по использованию сопоставлений BIN и BIN2 .

0 голосов
/ 10 февраля 2009

по вопросам 2 и 3

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

Те же вопросы применимы при рассмотрении Вопроса 3. (Я получаю это в основном по ссылке, предоставленной Tomalak). Если данные чувствительны к регистру и акценту, то вы хотите _BIN, потому что они сортируются быстрее. Если данные нерегулярны и не чувствительны к регистру / акценту, вам понадобится _BIN2, потому что они предназначены для данных Unicode.

0 голосов
/ 10 февраля 2009

Для решения вопроса 2:

Да, если для акцента требуется грамматика для данного языка.

0 голосов
/ 10 февраля 2009

Чтобы ответить на ваш вопрос 1. Чувствительный к акценту - хорошая вещь для финско-шведского языка. В противном случае ваши «å» и «ä» будут отсортированы как «a» и «ö» как «o». (Предполагая, что вы будете использовать такие международные символы).

Подробнее здесь: http://msdn.microsoft.com/en-us/library/ms143515.aspx (обсуждается как двоичная кодовая точка, так и чувствительность к акценту)

...