Collation and Unicode support
Collations in SQL Server provide sorting rules, case, and accent sensitivity properties for your data. Collations that are used with character data types, such as char and varchar, dictate the code page and corresponding characters that can be represented for that data type.
Whether you’re installing a new instance of SQL Server, restoring a database backup, or connecting server to client databases, it’s important to understand the locale requirements, sorting order, and case and accent sensitivity of the data that you’re working with. To list the collations that are available on your instance of SQL Server, see sys.fn_helpcollations (Transact-SQL).
To best use collation support in SQL Server, you should understand the terms that are defined in this topic and how they relate to the characteristics of your data.
Collation terms
Collation
A collation specifies the bit patterns that represent each character in a dataset. Collations also determine the rules that sort and compare data. SQL Server supports storing objects that have different collations in a single database. For non-Unicode columns, the collation setting specifies the code page for the data and which characters can be represented. The data that you move between non-Unicode columns must be converted from the source code page to the destination code page.
Transact-SQL statement results can vary when the statement is run in the context of different databases that have different collation settings. If possible, use a standardized collation for your organization. This way, you don’t have to specify the collation in every character or Unicode expression. If you must work with objects that have different collation and code page settings, code your queries to consider the rules of collation precedence. For more information, see Collation Precedence (Transact-SQL).
The options associated with a collation are case sensitivity, accent sensitivity, kana sensitivity, width sensitivity, and variation-selector sensitivity. SQL Server 2019 (15.x) introduces an additional option for UTF-8 encoding.
You can specify these options by appending them to the collation name. For example, the collation Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 is case-sensitive, accent-sensitive, kana-sensitive, width-sensitive, and UTF-8 encoded. As another example, the collation Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS is case-insensitive, accent-insensitive, kana-sensitive, width-sensitive, variation-selector-sensitive, and it uses non-Unicode encoding.
The behavior associated with these various options is described in the following table:
| Option | Description |
|---|---|
| Case-sensitive (_CS) | Distinguishes between uppercase and lowercase letters. If this option is selected, lowercase letters sort ahead of their uppercase versions. If this option isn’t selected, the collation is case-insensitive. That is, SQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. You can explicitly select case insensitivity by specifying _CI. |
| Accent-sensitive (_AS) | Distinguishes between accented and unaccented characters. For example, «a» is not equal to «бєҐ». If this option isn’t selected, the collation is accent-insensitive. That is, SQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. You can explicitly select accent insensitivity by specifying _AI. |
| Kana-sensitive (_KS) | Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. If this option isn’t selected, the collation is kana-insensitive. That is, SQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. Omitting this option is the only method of specifying kana-insensitivity. |
| Width-sensitive (_WS) | Distinguishes between full-width and half-width characters. If this option isn’t selected, SQL Server considers the full-width and half-width representation of the same character to be identical for sorting purposes. Omitting this option is the only method of specifying width-insensitivity. |
| Variation-selector-sensitive (_VSS) | Distinguishes between various ideographic variation selectors in the Japanese collations Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140, which are introduced in SQL Server 2017 (14.x). A variation sequence consists of a base character plus an additional variation selector. If this _VSS option isn’t selected, the collation is variation-selector-insensitive, and the variation selector isn’t considered in the comparison. That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. For more information, see Unicode Ideographic Variation Database. Variation-selector-sensitive (_VSS) collations aren’t supported in full-text search indexes. Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. SQL Server XML and CLR engines don’t support (_VSS) Variation selectors. |
| Binary (_BIN) 1 | Sorts and compares data in SQL Server tables based on the bit patterns defined for each character. Binary sort order is case-sensitive and accent-sensitive. Binary is also the fastest sorting order. For more information, see the Binary collations section in this article. |
| Binary-code point (_BIN2) 1 | Sorts and compares data in SQL Server tables based on Unicode code points for Unicode data. For non-Unicode data, Binary-code point uses comparisons that are identical to those for binary sorts. The advantage of using a Binary-code point sort order is that no data resorting is required in applications that compare sorted SQL Server data. As a result, a Binary-code point sort order provides simpler application development and possible performance increases. For more information, see the Binary collations section in this article. |
| UTF-8 (_UTF8) | Enables UTF-8 encoded data to be stored in SQL Server. If this option isn’t selected, SQL Server uses the default non-Unicode encoding format for the applicable data types. For more information, see the UTF-8 Support section in this article. |
1 If Binary or Binary-code point is selected, the Case-sensitive (_CS), Accent-sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options are not available.
Examples of collation options
Each collation is combined as a series of suffixes to define case-, accent-, width-, or kana-sensitivity. The following examples describe sort order behavior for various combinations of suffixes.
| Windows collation suffix | Sort order description |
|---|---|
| _BIN 1 | Binary sort |
| _BIN2 1, 2 | Binary-code point sort order |
| _CI_AI 2 | Case-insensitive, accent-insensitive, kana-insensitive, width-insensitive |
| _CI_AI_KS 2 | Case-insensitive, accent-insensitive, kana-sensitive, width-insensitive |
| _CI_AI_KS_WS 2 | Case-insensitive, accent-insensitive, kana-sensitive, width-sensitive |
| _CI_AI_WS 2 | Case-insensitive, accent-insensitive, kana-insensitive, width-sensitive |
| _CI_AS 2 | Case-insensitive, accent-sensitive, kana-insensitive, width-insensitive |
| _CI_AS_KS 2 | Case-insensitive, accent-sensitive, kana-sensitive, width-insensitive |
| _CI_AS_KS_WS 2 | Case-insensitive, accent-sensitive, kana-sensitive, width-sensitive |
| _CI_AS_WS 2 | Case-insensitive, accent-sensitive, kana-insensitive, width-sensitive |
| _CS_AI 2 | Case-sensitive, accent-insensitive, kana-insensitive, width-insensitive |
| _CS_AI_KS 2 | Case-sensitive, accent-insensitive, kana-sensitive, width-insensitive |
| _CS_AI_KS_WS 2 | Case-sensitive, accent-insensitive, kana-sensitive, width-sensitive |
| _CS_AI_WS 2 | Case-sensitive, accent-insensitive, kana-insensitive, width-sensitive |
| _CS_AS 2 | Case-sensitive, accent-sensitive, kana-insensitive, width-insensitive |
| _CS_AS_KS 2 | Case-sensitive, accent-sensitive, kana-sensitive, width-insensitive |
| _CS_AS_KS_WS 2 | Case-sensitive, accent-sensitive, kana-sensitive, width-sensitive |
| _CS_AS_WS 2 | Case-sensitive, accent-sensitive, kana-insensitive, width-sensitive |
1 If Binary or Binary-code point is selected, the Case-sensitive (_CS), Accent-sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options aren’t available.
2 Adding the UTF-8 option (_UTF8) enables you to encode Unicode data by using UTF-8. For more information, see the UTF-8 Support section in this article.
Collation sets
SQL Server supports the following collation sets:
Windows collations
Windows collations define rules for storing character data that’s based on an associated Windows system locale. For a Windows collation, you can implement a comparison of non-Unicode data by using the same algorithm as that for Unicode data. The base Windows collation rules specify which alphabet or language is used when dictionary sorting is applied. The rules also specify the code page that’s used to store non-Unicode character data. Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. This provides consistency across data types within SQL Server, and it lets developers sort strings in their applications by using the same rules that are used by SQL Server. For more information, see Windows Collation Name (Transact-SQL).
Binary collations
Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. They’re case-sensitive. A binary collation in SQL Server defines the locale and the ANSI code page that’s used. This enforces a binary sort order. Because they’re relatively simple, binary collations help improve application performance. For non-Unicode data types, data comparisons are based on the code points that are defined on the ANSI code page. For Unicode data types, data comparisons are based on the Unicode code points. For binary collations on Unicode data types, the locale isn’t considered in data sorts. For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they’re used on Unicode data. For more information, see Windows Collation Name (Transact-SQL).
There are two types of binary collations in SQL Server:
The legacy BIN collations, which performed an incomplete code-point-to-code-point comparison for Unicode data. These legacy binary collations compared the first character as WCHAR, followed by a byte-by-byte comparison. In a BIN collation, only the first character is sorted according to the code point, and remaining characters are sorted according to their byte values.
The newer BIN2 collations, which implement a pure code-point comparison. In a BIN2 collation, all characters are sorted according to their code points. Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.
SQL Server collations
SQL Server collations (SQL_*) provide sort order compatibility with earlier versions of SQL Server. The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that’s provided by Windows operating systems. However, sorting Unicode data is compatible with a particular version of Windows sorting rules. Because SQL Server collations use different comparison rules for non-Unicode and Unicode data, you see different results for comparisons of the same data, depending on the underlying data type. For more information, see SQL Server Collation Name (Transact-SQL).
During SQL Server setup, the default installation collation setting is determined by the operating system (OS) locale. You can change the server-level collation either during setup or by changing the OS locale before installation. For backward compatibility reasons, the default collation is set to the oldest available version that’s associated with each specific locale. Therefore, this isn’t always the recommended collation. To take full advantage of SQL Server features, change the default installation settings to use Windows collations. For example, for the OS locale «English (United States)» (code page 1252), the default collation during setup is SQL_Latin1_General_CP1_CI_AS, and it can be changed to its closest Windows collation counterpart, Latin1_General_100_CI_AS_SC.
When you upgrade an English-language instance of SQL Server, you can specify SQL Server collations (SQL_*) for compatibility with existing instances of SQL Server. Because the default collation for an instance of SQL Server is defined during setup, make sure that you specify the collation settings carefully when the following conditions are true:
Collation levels
Setting collations are supported at the following levels of an instance of SQL Server:
Server-level collations
The default server collation is determined during SQL Server setup, and it becomes the default collation of the system databases and all user databases.
The following table shows the default collation designations, as determined by the operating system (OS) locale, including their Windows and SQL Language Code Identifiers (LCID):
After you’ve assigned a collation to the server, you can change it only by exporting all database objects and data, rebuilding the master database, and importing all database objects and data. Instead of changing the default collation of an instance of SQL Server, you can specify the desired collation when you create a new database or database column.
To query the server collation for an instance of SQL Server, use the SERVERPROPERTY function:
To query the server for all available collations, use the following fn_helpcollations() built-in function:
Database-level collations
When you create or modify a database, you can use the COLLATE clause of the CREATE DATABASE or ALTER DATABASE statement to specify the default database collation. If no collation is specified, the database is assigned the server collation.
You can’t change the collation of system databases unless you change the collation for the server.
The database collation is used for all metadata in the database, and the collation is the default for all string columns, temporary objects, variable names, and any other strings used in the database. When you change the collation of a user database, there can be collation conflicts when queries in the database access temporary tables. Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. Queries that compare character data between the user database and tempdb might fail if the collations cause a conflict in evaluating the character data. You can resolve this issue by specifying the COLLATE clause in the query. For more information, see COLLATE (Transact-SQL).
You can’t change the collation after the database has been created on Azure SQL Database.
You can change the collation of a user database by using an ALTER DATABASE statement that’s similar to the following:
Поддержка параметров сортировки и Юникода
Параметры сортировки SQL Server предоставляют свойства, управляющие правилами сортировки, учета регистра и диакритических знаков в данных. Параметры сортировки, используемые с символьными типами данных, такими как char или varchar, указывают кодовую страницу и соответствующие символы, которые могут быть представлены для этого типа данных.
Независимо от того, устанавливается ли новый экземпляр SQL Server, восстанавливается ли база данных из резервной копии или сервер соединяется с клиентскими базами данных, важно понимать требования к языковому стандарту, знать порядок сортировки и необходимость учета регистра или диакритических знаков в данных, с которыми вы работаете. Описание того, как получить список доступных параметров сортировки в экземпляре SQL Server, см. в статье sys.fn_helpcollations (Transact-SQL).
Для эффективного использования поддержки параметров сортировки в SQL Serverнеобходимо понимать термины, представленные в этой статье, и их связь с характеристиками данных.
Термины, связанные с параметрами сортировки
Параметры сортировки
Параметры сортировки задают битовые шаблоны, представляющие каждый символ в наборе данных. Параметры сортировки определяют правила, используемые при сортировке и сравнении данных. SQL Server поддерживает хранение объектов с различными параметрами сортировки в одной базе данных. Для столбцов в кодировке, отличающейся от Юникода, настройка параметров сортировки определяет кодовую страницу данных и соответствующую возможность представления символов. Данные, которые перемещаются между столбцами в форматах, отличных от Юникода, необходимо преобразовывать из исходной кодовой страницы в целевую.
Результат выполнения инструкцииTransact-SQL может различаться в зависимости от контекста различных баз данных, которые имеют свои параметры сортировки. По возможности используйте стандартные параметры сортировки для всей организации. Тем самым не придется указывать параметры сортировки для каждого символа или выражения Юникода. Если необходимо работать с объектами, имеющими различные параметры сортировки и кодовые страницы, создание запросов должно производиться с учетом очередности параметров сортировки. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).
Параметры сортировки могут учитывать регистр, диакритические знаки, тип японской азбуки, ширину символов и знаки выбора варианта. В SQL Server 2019 (15.x) появился дополнительный параметр для кодирования UTF-8.
Эти параметры можно задать путем их добавления к имени параметров сортировки. Например, параметр Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 определяет параметры сортировки с учетом диакритических знаков, регистра, типа японской азбуки, ширины символов и кодировки UTF-8. Еще один пример: параметр Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS определяет параметры сортировки без учета регистра, без учета диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов, с учетом знаков выбора варианта и с использованием кодировки не в Юникоде.
В приведенной ниже таблице описывается режим работы, связанный с этими параметрами.
| Параметр | Описание |
|---|---|
| С учетом регистра (_CS) | Различаются буквы верхнего и нижнего регистров. При выборе этого параметра буквы нижнего регистра при сортировке ставятся перед соответствующими буквами верхнего регистра. Если этот параметр не выбран, параметры сортировки не учитывают регистр. То есть при сортировке SQL Server считает буквы верхнего и нижнего регистров и делает их идентичными друг другу. Можно явно выбрать нечувствительность к регистру, указав параметр _CI. |
| С учетом диакритических знаков (_AS) | Различаются символы с диакритическими знаками и без них. Например, «a» отлично от «ấ». Если этот параметр не выбран, параметры сортировки не учитывают диакритические знаки. То есть при сортировке SQL Server рассматривает варианты букв с диакритическими знаками и без них как идентичные. Можно явно выбрать нечувствительность к диакритическим знакам, указав параметр _АI. |
| С учетом типа японской азбуки (_KS) | Различаются два вида японской азбуки: хирагана и катакана. Если этот параметр не выбран, параметры сортировки не учитывают тип японской азбуки. То есть при сортировке SQL Server рассматривает символы хирагана и катакана как идентичные. Пропуск этого параметра является единственным способом указания нечувствительности к типу японской азбуки. |
| С учетом ширины символов (_WS) | Отличия между символами полной ширины и средней ширины. Если этот параметр не выбран, SQL Server принимает отображение одного и того же символа полной ширины и средней ширины как идентичное для целей сортировки. Пропуск этого параметра является единственным способом указания нечувствительности к ширине символов. |
| С учетом знаков выбора варианта (_VSS) | Различаются идеографические знаки выбора варианта в японских параметрах сортировки Japanese_Bushu_Kakusu_140 и Japanese_XJIS_140, появившихся в SQL Server 2017 (14.x);. Последовательность вариантов состоит из базового знака и дополнительного знака выбора вариантов. Если этот параметр _VSS не выбран, параметры сортировки не учитывают знак выбора варианта, а сам знак выбора варианта не учитывается при сравнении. То есть при сортировке SQL Server считает символы, основанные на одном базовом символе, но с разными знаками выбора варианта, равнозначными. Дополнительные сведения см. в статье Unicode Ideographic Variation Database (База данных идеографических вариантов Юникода). Параметры сортировки с учетом знаков выбора варианта (_VSS) не поддерживаются в полнотекстовых индексах. Полнотекстовые индексы поддерживают только параметры с учетом диакритических знаков (_AS), типа японской азбуки (_KS) и ширины символов (_WS). Подсистемы CLR и XML в SQL Server не поддерживают знаки выбора варианта (_VSS). |
| Двоичный (_BIN) 1 | Данные в SQL Server сортируются и сравниваются на основе битовых шаблонов, определенных для каждого символа. Двоичный порядок сортировки учитывает регистр и диакритические знаки. Двоичный порядок сортировки является самым быстрым. Дополнительные сведения см. в разделе Параметры двоичной сортировки в этой статье. |
| Элемент двоичного кода (_BIN2) 1 | Данные в SQL Server сортируются и сравниваются на основе элементов Юникода для данных в Юникоде. Для типов данных не в Юникоде при выборе BIN2 сравнение производится так же, как и двоичная сортировка. Преимуществом использования порядка сортировки BIN2 является то, что приложениям, сравнивающим отсортированные данные SQL Server, не требуется никакой повторной сортировки данных. В результате сортировка BIN2 упрощает разработку приложения и увеличивает ожидаемую производительность. Дополнительные сведения см. в разделе Параметры двоичной сортировки в этой статье. |
| UTF-8 (_UTF8) | Позволяет хранить данные в кодировке UTF-8 в SQL Server. Если этот параметр не выбран, SQL Server использует формат кодировки по умолчанию (не в Юникоде) для подходящих типов данных. Дополнительные сведения см. в разделе Поддержка UTF-8 в этой статье. |
1 Если выбран порядок сортировки BIN или BIN2, параметры с учетом регистра (_CS), диакритических знаков (_AS), типа японской азбуки (_KS) и ширины символов (_WS) недоступны.
Примеры параметров сортировки
Каждый набор параметров сортировки представляет собой последовательность суффиксов для определения учета регистра, диакритических знаков, ширины символов и типа японской азбуки. В следующих примерах описан порядок сортировки для различных сочетаний суффиксов.
| Суффикс параметров сортировки Windows | Описание порядка сортировки |
|---|---|
| _BIN 1 | Двоичная сортировка |
| _BIN2 1, 2 | Порядок сортировки элементов двоичного кода |
| _CI_AI 2 | Без учета регистра, без учета диакритических знаков, без учета типа японской азбуки, без учета ширины символов |
| _CI_AI_KS 2 | Без учета регистра, без учета диакритических знаков, с учетом типа японской азбуки, без учета ширины символов |
| _CI_AI_KS_WS 2 | Без учета регистра, без учета диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов |
| _CI_AI_WS 2 | Без учета регистра, без учета диакритических знаков, без учета типа японской азбуки, с учетом ширины символов |
| _CI_AS 2 | Без учета регистра, с учетом диакритических знаков, без учета типа японской азбуки, без учета ширины символов |
| _CI_AS_KS 2 | Без учета регистра, с учетом диакритических знаков, с учетом типа японской азбуки, без учета ширины символов |
| _CI_AS_KS_WS 2 | Без учета регистра, с учетом диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов |
| _CI_AS_WS 2 | Без учета регистра, с учетом диакритических знаков, без учета типа японской азбуки, с учетом ширины символов |
| _CS_AI 2 | С учетом регистра, без учета диакритических знаков, без учета типа японской азбуки, без учета ширины символов |
| _CS_AI_KS 2 | С учетом регистра, без учета диакритических знаков, с учетом типа японской азбуки, без учета ширины символов |
| _CS_AI_KS_WS 2 | С учетом регистра, без учета диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов |
| _CS_AI_WS 2 | С учетом регистра, без учета диакритических знаков, без учета типа японской азбуки, с учетом ширины символов |
| _CS_AS 2 | С учетом регистра, с учетом диакритических знаков, без учета типа японской азбуки, без учета ширины символов |
| _CS_AS_KS 2 | С учетом регистра, с учетом диакритических знаков, с учетом типа японской азбуки, без учета ширины символов |
| _CS_AS_KS_WS 2 | С учетом регистра, с учетом диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов |
| _CS_AS_WS 2 | С учетом регистра, с учетом диакритических знаков, без учета типа японской азбуки, с учетом ширины символов |
1 Если выбран порядок сортировки BIN или BIN2, параметры с учетом регистра (_CS), диакритических знаков (_AS), типа японской азбуки (_KS) и ширины символов (_WS) недоступны.
2 Добавление параметра UTF-8 (_UTF8) позволяет кодировать данные в Юникоде с использованием UTF-8. Дополнительные сведения см. в разделе Поддержка UTF-8 в этой статье.
Наборы параметров сортировки
SQL Server поддерживает следующие наборы параметров сортировки:
Параметры сортировки Windows
Параметры сортировки Windows определяют правила хранения символьных данных на основе соответствующего языкового стандарта системы Windows. Для параметров сортировки Windows сравнение данных в формате, отличном от Юникода, можно реализовать с помощью такого же алгоритма, как и для данных в Юникоде. Базовые правила параметров сортировки Windows задают алфавит или язык, используемый при сортировке по словарю. Кроме того, они определяют кодовую страницу, используемую для хранения символьных данных не в Юникоде. Сортировка в Юникоде и в других форматах совместима со строковым сравнением в соответствующей версии Windows. Тем самым обеспечивается согласованность обработки различных типов данных в SQL Server, а разработчики получают возможность сортировать строки в приложениях по тем же правилам, что и в SQL Server. Дополнительные сведения см. в статье Имя параметров сортировки Windows (Transact-SQL).
Параметры двоичной сортировки
При двоичных параметрах сортировки данные сортируются на основе последовательности закодированных значений, определяемых локалью и типом данных. Эти параметры учитывают регистр. Параметры двоичной сортировки в SQL Server определяют используемый языковой стандарт и кодовую страницу ANSI. При этом принудительно реализуется двоичный порядок сортировки. По причине своей относительной простоты параметры двоичной сортировки помогают повысить производительность приложений. Для типов данных не в Юникоде сравнение данных производится на основе кодовых точек, определенных в кодовой странице ANSI. Типы данных в Юникоде сравниваются на основе элементов кода Юникода. Для параметров двоичной сортировки на основе типов данных Юникода при сортировке данных языковой стандарт не учитывается. Например, параметры сортировки Latin_1_General_BIN и Japanese_BIN дают одинаковые результаты сортировки, если используются с данными в Юникоде. Дополнительные сведения см. в статье Имя параметров сортировки Windows (Transact-SQL).
В SQL Server имеются два типа параметров двоичной сортировки.
Прежние параметры двоичной сортировки BIN, которые выполняли неполное сравнение кодовых точек для данных в Юникоде. Эти параметры двоичной сортировки сравнивали первые символы как тип данных WCHAR, а затем следовало побитовое сравнение. При использовании параметров сортировки BIN только первый символ сортируется в соответствии с кодовой точкой. Остальные символы сортируются в соответствии с их значениями байта.
Новые параметры сортировки BIN2, которые выполняют сравнение исключительно кодовых точек. При использовании параметров сортировки BIN2 все символы сортируются в соответствии с их кодовыми точками. Так как платформа Intel не всегда является архитектурой по порядку следования байтов, символы кода Unicode всегда хранятся с перестановкой байтов.
Параметры сортировки SQL Server
Параметры сортировки SQL Server (SQL_*) имеют обратную совместимость с более ранними версиями SQL Server, с точки зрения порядка сортировки. Правила сортировки словаря для данных в формате, отличном от Юникода, не совместимы ни с какими подпрограммами сортировки операционных систем Windows. Однако сортировка данных в Юникоде совместима с правилами сортировки определенной версии Windows. Так как параметры сортировки SQL Server применяют для данных в Юникоде и других форматах разные правила сравнения, при сравнении одних и тех же данных получаются разные результаты, которые зависят от базового типа данных. Дополнительные сведения см. в статье Имя параметров сортировки SQL Server (Transact-SQL).
Во время установки SQL Server параметры сортировки по умолчанию определяются языковым стандартом операционной системы. Параметры сортировки уровня сервера можно изменить в процессе установки. Кроме того, их можно изменить, сменив языковой стандарт ОС перед установкой. В целях обратной совместимости для параметров сортировки по умолчанию устанавливается самая старая доступная версия, связанная с определенным языковым стандартом. В связи с этим данные параметры сортировки рекомендуется использовать не во всех случаях. Для использования всех возможностей SQL Server следует изменить параметры установки по умолчанию для параметров сортировки Windows. Например, для языкового стандарта ОС «Английский (США)» (кодовая страница 1252) параметры сортировки по умолчанию во время установки — SQL_Latin1_General_CP1_CI_AS. Их можно изменить на ближайший аналог в Windows Latin1_General_100_CI_AS_SC.
При обновлении англоязычной версии экземпляра SQL Server можно задать параметры сортировки SQL Server (SQL_*), чтобы обеспечить совместимость с существующими экземплярами SQL Server. Так как для экземпляра SQL Server параметры сортировки по умолчанию определяются во время установки, очень важно правильно настроить параметры сортировки в следующих случаях:
Уровни параметров сортировки
Настройка параметров сортировки поддерживается на следующих уровнях экземпляра SQL Server.
Параметры сортировки уровня сервера
Параметры сортировки сервера по умолчанию определяются в процессе установки SQL Server и становятся параметрами сортировки по умолчанию для системных баз данных и всех пользовательских баз данных.
В приведенной ниже таблице представлены параметры сортировки по умолчанию, определяемые языковым стандартом операционной системы (ОС), включая коды языков (LCID) в Windows и SQL.
| Локаль Windows | Код языка в Windows | Код языка SQL | Параметры сортировки по умолчанию |
|---|---|---|---|
| Африкаанс (Южная Африка) | 0x0436 | 0x0409 | Latin1_General_CI_AS |
| Албанский (Албания) | 0x041c | 0x041c | Albanian_CI_AS |
| Эльзасский (Франция) | 0x0484 | 0x0409 | Latin1_General_CI_AS |
| Амхарик (Эфиопия) | 0x045e | 0x0409 | Latin1_General_CI_AS |
| Арабский (Алжир) | 0x1401 | 0x0401 | Arabic_CI_AS |
| Арабский (Бахрейн) | 0x3c01 | 0x0401 | Arabic_CI_AS |
| Арабский (Египет) | 0x0c01 | 0x0401 | Arabic_CI_AS |
| Арабский (Ирак) | 0x0801 | 0x0401 | Arabic_CI_AS |
| Арабский (Иордания) | 0x2c01 | 0x0401 | Arabic_CI_AS |
| Арабский (Кувейт) | 0x3401 | 0x0401 | Arabic_CI_AS |
| Арабский (Ливан) | 0x3001 | 0x0401 | Arabic_CI_AS |
| Арабский (Ливия) | 0x1001 | 0x0401 | Arabic_CI_AS |
| Арабский (Марокко) | 0x1801 | 0x0401 | Arabic_CI_AS |
| Арабский (Оман) | 0x2001 | 0x0401 | Arabic_CI_AS |
| Арабский (Катар) | 0x4001 | 0x0401 | Arabic_CI_AS |
| Арабский (Саудовская Аравия) | 0x0401 | 0x0401 | Arabic_CI_AS |
| Арабский (Сирия) | 0x2801 | 0x0401 | Arabic_CI_AS |
| Арабский (Тунис) | 0x1c01 | 0x0401 | Arabic_CI_AS |
| Арабский (ОАЭ) | 0x3801 | 0x0401 | Arabic_CI_AS |
| Арабский (Йемен) | 0x2401 | 0x0401 | Arabic_CI_AS |
| Армянский (Армения) | 0x042b | 0x0419 | Latin1_General_CI_AS |
| Ассамский (Индия) | 0x044d | 0x044d | Недоступен на уровне сервера |
| Азербайджанский (Азербайджан, кириллица) | 0x082c | 0x082c | Является нерекомендуемым и недоступен на уровне сервера |
| Азербайджанский (Азербайджан, латиница) | 0x042c | 0x042c | Является нерекомендуемым и недоступен на уровне сервера |
| Башкирский (Россия) | 0x046d | 0x046d | Latin1_General_CI_AI |
| Баскский | 0x042d | 0x0409 | Latin1_General_CI_AS |
| Белорусский (Беларусь) | 0x0423 | 0x0419 | Cyrillic_General_CI_AS |
| Бенгальский (Бангладеш) | 0x0845 | 0x0445 | Недоступен на уровне сервера |
| Bengali (India) | 0x0445 | 0x0439 | Недоступен на уровне сервера |
| Боснийский (Босния и Герцеговина, кириллица) | 0x201a | 0x201a | Latin1_General_CI_AI |
| Боснийский (Босния и Герцеговина, латиница) | 0x141a | 0x141a | Latin1_General_CI_AI |
| Бретонский (Франция) | 0x047e | 0x047e | Latin1_General_CI_AI |
| Болгарский (Болгария) | 0x0402 | 0x0419 | Cyrillic_General_CI_AS |
| Catalan (Catalan) | 0x0403 | 0x0409 | Latin1_General_CI_AS |
| Китайский (Гонконг, КНР) | 0x0c04 | 0x0404 | Chinese_Taiwan_Stroke_CI_AS |
| Chinese (Macao SAR) | 0x1404 | 0x1404 | Latin1_General_CI_AI |
| Китайский (Макау) | 0x21404 | 0x21404 | Latin1_General_CI_AI |
| Китайский (КНР) | 0x0804 | 0x0804 | Chinese_PRC_CI_AS |
| Китайский (КНР) | 0x20804 | 0x20804 | Chinese_PRC_Stroke_CI_AS |
| Chinese (Singapore) | 0x1004 | 0x0804 | Chinese_PRC_CI_AS |
| Chinese (Singapore) | 0x21004 | 0x20804 | Chinese_PRC_Stroke_CI_AS |
| Китайский (Тайвань) | 0x30404 | 0x30404 | Chinese_Taiwan_Bopomofo_CI_AS |
| Китайский (Тайвань) | 0x0404 | 0x0404 | Chinese_Taiwan_Stroke_CI_AS |
| Корсиканский (Франция) | 0x0483 | 0x0483 | Latin1_General_CI_AI |
| Хорватский (Босния и Герцеговина, латиница) | 0x101a | 0x041a | Croatian_CI_AS |
| Хорватский (Хорватия) | 0x041a | 0x041a | Croatian_CI_AS |
| Чешский (Чешская Республика) | 0x0405 | 0x0405 | Czech_CI_AS |
| Датский (Дания) | 0x0406 | 0x0406 | Danish_Norwegian_CI_AS |
| Дари (Афганистан) | 0x048c | 0x048c | Latin1_General_CI_AI |
| Мальдивский (Мальдивы) | 0x0465 | 0x0465 | Недоступен на уровне сервера |
| Нидерландский (Бельгия) | 0x0813 | 0x0409 | Latin1_General_CI_AS |
| Нидерландский (Нидерланды) | 0x0413 | 0x0409 | Latin1_General_CI_AS |
| Английский (Австралия) | 0x0c09 | 0x0409 | Latin1_General_CI_AS |
| Английский (Белиз) | 0x2809 | 0x0409 | Latin1_General_CI_AS |
| Английский (Канада) | 0x1009 | 0x0409 | Latin1_General_CI_AS |
| Английский (Карибский бассейн) | 0x2409 | 0x0409 | Latin1_General_CI_AS |
| Английский (Индия) | 0x4009 | 0x0409 | Latin1_General_CI_AS |
| Английский (Ирландия) | 0x1809 | 0x0409 | Latin1_General_CI_AS |
| Английский (Ямайка) | 0x2009 | 0x0409 | Latin1_General_CI_AS |
| Английский (Малайзия) | 0x4409 | 0x0409 | Latin1_General_CI_AS |
| Английский (Новая Зеландия) | 0x1409 | 0x0409 | Latin1_General_CI_AS |
| Английский (Филиппины) | 0x3409 | 0x0409 | Latin1_General_CI_AS |
| Английский (Сингапур) | 0x4809 | 0x0409 | Latin1_General_CI_AS |
| Английский (Южная Африка) | 0x1c09 | 0x0409 | Latin1_General_CI_AS |
| Английский (Тринидад и Тобаго) | 0x2c09 | 0x0409 | Latin1_General_CI_AS |
| Английский (Великобритания) | 0x0809 | 0x0409 | Latin1_General_CI_AS |
| Английский (США) | 0x0409 | 0x0409 | SQL_Latin1_General_CP1_CI_AS |
| Английский (Зимбабве) | 0x3009 | 0x0409 | Latin1_General_CI_AS |
| Эстонский (Эстония) | 0x0425 | 0x0425 | Estonian_CI_AS |
| Фарерский (Фарерские острова) | 0x0438 | 0x0409 | Latin1_General_CI_AS |
| Филиппинский (Филиппины) | 0x0464 | 0x0409 | Latin1_General_CI_AS |
| Финский (Финляндия) | 0x040b | 0x040b | Finnish_Swedish_CI_AS |
| Французский (Бельгия) | 0x080c | 0x040c | French_CI_AS |
| Французский (Канада) | 0x0c0c | 0x040c | French_CI_AS |
| Французский (Франция) | 0x040c | 0x040c | French_CI_AS |
| Французский (Люксембург) | 0x140c | 0x040c | French_CI_AS |
| Французский (Монако) | 0x180c | 0x040c | French_CI_AS |
| Французский (Швейцария) | 0x100c | 0x040c | French_CI_AS |
| Фризский (Нидерланды) | 0x0462 | 0x0462 | Latin1_General_CI_AI |
| Галисийский | 0x0456 | 0x0409 | Latin1_General_CI_AS |
| Грузинский (Грузия) | 0x10437 | 0x10437 | Georgian_Modern_Sort_CI_AS |
| Грузинский (Грузия) | 0x0437 | 0x0419 | Latin1_General_CI_AS |
| Немецкий (сортировка телефонной книги) | 0x10407 | 0x10407 | German_PhoneBook_CI_AS |
| Немецкий (Австрия) | 0x0c07 | 0x0409 | Latin1_General_CI_AS |
| Немецкий (Германия) | 0x0407 | 0x0409 | Latin1_General_CI_AS |
| Немецкий (Лихтенштейн) | 0x1407 | 0x0409 | Latin1_General_CI_AS |
| Немецкий (Люксембург) | 0x1007 | 0x0409 | Latin1_General_CI_AS |
| Немецкий (Швейцария) | 0x0807 | 0x0409 | Latin1_General_CI_AS |
| Греческий (Греция) | 0x0408 | 0x0408 | Greek_CI_AS |
| Гренландский (Гренландия) | 0x046f | 0x0406 | Danish_Norwegian_CI_AS |
| Гуджарати (Индия) | 0x0447 | 0x0439 | Недоступен на уровне сервера |
| Хауса (Нигерия, латиница) | 0x0468 | 0x0409 | Latin1_General_CI_AS |
| Иврит (Израиль) | 0x040d | 0x040d | Hebrew_CI_AS |
| Хинди (Индия) | 0x0439 | 0x0439 | Недоступен на уровне сервера |
| Венгерский (Венгрия) | 0x040e | 0x040e | Hungarian_CI_AS |
| Венгерский (техническая сортировка) | 0x1040e | 0x1040e | Hungarian_Technical_CI_AS |
| Исландский (Исландия) | 0x040f | 0x040f | Icelandic_CI_AS |
| Игбо (Нигерия) | 0x0470 | 0x0409 | Latin1_General_CI_AS |
| Индонезийский (Индонезия) | 0x0421 | 0x0409 | Latin1_General_CI_AS |
| Инуитский (Канада, латиница) | 0x085d | 0x0409 | Latin1_General_CI_AS |
| Инуитский (Канада) | 0x045d | 0x045d | Latin1_General_CI_AI |
| Ирландский (Ирландия) | 0x083c | 0x0409 | Latin1_General_CI_AS |
| Итальянский (Италия) | 0x0410 | 0x0409 | Latin1_General_CI_AS |
| Итальянский (Швейцария) | 0x0810 | 0x0409 | Latin1_General_CI_AS |
| Японский (Япония) | 0x0411 | 0x0411 | Japanese_CI_AS |
| Японский (Япония) | 0x040411 | 0x40411 | Latin1_General_CI_AI |
| Каннада (Индия) | 0x044b | 0x0439 | Недоступен на уровне сервера |
| Казахский (Казахстан) | 0x043f | 0x043f | Kazakh_90_CI_AS |
| Кхмерский (Камбоджа) | 0x0453 | 0x0453 | Недоступен на уровне сервера |
| Киче (Гватемала) | 0x0486 | 0x0c0a | Modern_Spanish_CI_AS |
| Киньяруанда (Руанда) | 0x0487 | 0x0409 | Latin1_General_CI_AS |
| Конкани (Индия) | 0x0457 | 0x0439 | Недоступен на уровне сервера |
| Корейский (Корея, словарная сортировка) | 0x0412 | 0x0412 | Korean_Wansung_CI_AS |
| Киргизский (Киргизия) | 0x0440 | 0x0419 | Cyrillic_General_CI_AS |
| Лаосский (Лаосская Народно-Демократическая Республика) | 0x0454 | 0x0454 | Недоступен на уровне сервера |
| Латышский (Латвия) | 0x0426 | 0x0426 | Latvian_CI_AS |
| Литовский (Литва) | 0x0427 | 0x0427 | Lithuanian_CI_AS |
| Нижний Сорбский (Германия) | 0x082e | 0x0409 | Latin1_General_CI_AS |
| Люксембургский (Люксембург) | 0x046e | 0x0409 | Latin1_General_CI_AS |
| Северная Македония | 0x042f | 0x042f | Macedonian_FYROM_90_CI_AS |
| Малайский (Бруней-Даруссалам) | 0x083e | 0x0409 | Latin1_General_CI_AS |
| Малайский (Малайзия) | 0x043e | 0x0409 | Latin1_General_CI_AS |
| Малайялам (Индия) | 0x044c | 0x0439 | Недоступен на уровне сервера |
| Мальтийский (Мальта) | 0x043a | 0x043a | Latin1_General_CI_AI |
| Маорийский (Новая Зеландия) | 0x0481 | 0x0481 | Latin1_General_CI_AI |
| Мапудунгун (Чили) | 0x047a | 0x047a | Latin1_General_CI_AI |
| Маратхи (Индия) | 0x044e | 0x0439 | Недоступен на уровне сервера |
| Могавк (Канада) | 0x047c | 0x047c | Latin1_General_CI_AI |
| Монгольский (Монголия) | 0x0450 | 0x0419 | Cyrillic_General_CI_AS |
| Монгольский (КНР) | 0x0850 | 0x0419 | Cyrillic_General_CI_AS |
| Непальский (Непал) | 0x0461 | 0x0461 | Недоступен на уровне сервера |
| Норвежский (букмол, Норвегия) | 0x0414 | 0x0414 | Latin1_General_CI_AI |
| Норвежский (нюнорск/ландсмол, Норвегия) | 0x0814 | 0x0414 | Latin1_General_CI_AI |
| Окситанский (Франция) | 0x0482 | 0x040c | French_CI_AS |
| Ория (Индия) | 0x0448 | 0x0439 | Недоступен на уровне сервера |
| Пушту (Афганистан) | 0x0463 | 0x0463 | Недоступен на уровне сервера |
| Персидский (Иран) | 0x0429 | 0x0429 | Latin1_General_CI_AI |
| Польский (Польша) | 0x0415 | 0x0415 | Polish_CI_AS |
| Португальский (Бразилия) | 0x0416 | 0x0409 | Latin1_General_CI_AS |
| Португальский (Португалия) | 0x0816 | 0x0409 | Latin1_General_CI_AS |
| Панджабский (Индия) | 0x0446 | 0x0439 | Недоступен на уровне сервера |
| Кечуа (Боливия) | 0x046b | 0x0409 | Latin1_General_CI_AS |
| Кечуа (Эквадор) | 0x086b | 0x0409 | Latin1_General_CI_AS |
| Кечуа (Перу) | 0x0c6b | 0x0409 | Latin1_General_CI_AS |
| Румынский (Румыния) | 0x0418 | 0x0418 | Romanian_CI_AS |
| Романш (Швейцария) | 0x0417 | 0x0417 | Latin1_General_CI_AI |
| Русский (Россия) | 0x0419 | 0x0419 | Cyrillic_General_CI_AS |
| Саха (Россия) | 0x0485 | 0x0485 | Latin1_General_CI_AI |
| Саамский (Инари, Финляндия) | 0x243b | 0x083b | Latin1_General_CI_AI |
| Саамский (Луле, Норвегия) | 0x103b | 0x043b | Latin1_General_CI_AI |
| Саамский (Луле, Швеция) | 0x143b | 0x083b | Latin1_General_CI_AI |
| Саамский (Северный, Финляндия) | 0x0c3b | 0x083b | Latin1_General_CI_AI |
| Саамский (Северный, Норвегия) | 0x043b | 0x043b | Latin1_General_CI_AI |
| Саамский (Северный, Швеция) | 0x083b | 0x083b | Latin1_General_CI_AI |
| Саамский (Скольт, Финляндия) | 0x203b | 0x083b | Latin1_General_CI_AI |
| Саамский (Южный, Норвегия) | 0x183b | 0x043b | Latin1_General_CI_AI |
| Саамский (Южный, Швеция) | 0x1c3b | 0x083b | Latin1_General_CI_AI |
| Санскрит (Индия) | 0x044f | 0x0439 | Недоступен на уровне сервера |
| Сербский (Босния и Герцеговина, кириллица) | 0x1c1a | 0x0c1a | Latin1_General_CI_AI |
| Сербский (Босния и Герцеговина, латиница) | 0x181a | 0x081a | Latin1_General_CI_AI |
| Сербский (Сербия, кириллица) | 0x0c1a | 0x0c1a | Latin1_General_CI_AI |
| Сербский (Сербия, латиница) | 0x081a | 0x081a | Latin1_General_CI_AI |
| Сесуто са Лебоа/Северный Суто (Южная Африка) | 0x046c | 0x0409 | Latin1_General_CI_AS |
| Сетсвана/Тсвана (Южная Африка) | 0x0432 | 0x0409 | Latin1_General_CI_AS |
| Синхала (Шри-Ланка) | 0x045b | 0x0439 | Недоступен на уровне сервера |
| Словацкий (Словакия) | 0x041b | 0x041b | Slovak_CI_AS |
| Словенский (Словения) | 0x0424 | 0x0424 | Slovenian_CI_AS |
| Испанский (Аргентина) | 0x2c0a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Боливия) | 0x400a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Чили) | 0x340a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Колумбия) | 0x240a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Коста-Рика) | 0x140a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Доминиканская Республика) | 0x1c0a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Эквадор) | 0x300a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Эль-Сальвадор) | 0x440a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Гватемала) | 0x100a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Гондурас) | 0x480a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Мексика) | 0x080a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Никарагуа) | 0x4c0a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Панама) | 0x180a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Парагвай) | 0x3c0a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Перу) | 0x280a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Пуэрто-Рико) | 0x500a | 0x0c0a | Modern_Spanish_CI_AS |
| испанский (Испания) | 0x0c0a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Испания, традиционная сортировка) | 0x040a | 0x040a | Traditional_Spanish_CI_AS |
| Испанский (США) | 0x540a | 0x0409 | Latin1_General_CI_AS |
| Испанский (Уругвай) | 0x380a | 0x0c0a | Modern_Spanish_CI_AS |
| Испанский (Венесуэла) | 0x200a | 0x0c0a | Modern_Spanish_CI_AS |
| Суахили (Кения) | 0x0441 | 0x0409 | Latin1_General_CI_AS |
| Шведский (Финляндия) | 0x081d | 0x040b | Finnish_Swedish_CI_AS |
| Шведский (Швеция) | 0x041d | 0x040b | Finnish_Swedish_CI_AS |
| Сирийский (Сирия) | 0x045a | 0x045a | Недоступен на уровне сервера |
| Таджикский (Таджикистан) | 0x0428 | 0x0419 | Cyrillic_General_CI_AS |
| Тамазихт (Алжир, латиница) | 0x085f | 0x085f | Latin1_General_CI_AI |
| Тамильский (Индия) | 0x0449 | 0x0439 | Недоступен на уровне сервера |
| Татарский (Россия) | 0x0444 | 0x0444 | Cyrillic_General_CI_AS |
| Телугу (Индия) | 0x044a | 0x0439 | Недоступен на уровне сервера |
| Тайский (Таиланд) | 0x041e | 0x041e | Thai_CI_AS |
| Тибетский (КНР) | 0x0451 | 0x0451 | Недоступен на уровне сервера |
| Турецкий (Турция) | 0x041f | 0x041f | Turkish_CI_AS |
| Туркменский (Туркменистан) | 0x0442 | 0x0442 | Latin1_General_CI_AI |
| Уйгурский (КНР) | 0x0480 | 0x0480 | Latin1_General_CI_AI |
| Украинский (Украина) | 0x0422 | 0x0422 | Ukrainian_CI_AS |
| Верхний Сорбский (Германия) | 0x042e | 0x042e | Latin1_General_CI_AI |
| Урду (Пакистан) | 0x0420 | 0x0420 | Latin1_General_CI_AI |
| Узбекский (Узбекистан, кириллица) | 0x0843 | 0x0419 | Cyrillic_General_CI_AS |
| Узбекский (Узбекистан, латиница) | 0x0443 | 0x0443 | Uzbek_Latin_90_CI_AS |
| Вьетнамский (Вьетнам) | 0x042a | 0x042a | Vietnamese_CI_AS |
| Валлийский (Великобритания) | 0x0452 | 0x0452 | Latin1_General_CI_AI |
| Волоф (Сенегал) | 0x0488 | 0x040c | French_CI_AS |
| Коса/исиКоса (Южная Африка) | 0x0434 | 0x0409 | Latin1_General_CI_AS |
| Носу (КНР) | 0x0478 | 0x0409 | Latin1_General_CI_AS |
| Йоруба (Нигерия) | 0x046a | 0x0409 | Latin1_General_CI_AS |
| Зулу/исиЗулу (Южная Африка) | 0x0435 | 0x0409 | Latin1_General_CI_AS |
После назначения параметров сортировки серверу изменить их можно только путем экспорта всех данных и объектов базы данных, перестроения базы данных master и последующего импорта всех объектов и данных базы данных. Вместо изменения параметров сортировки по умолчанию для экземпляра SQL Serverможно задать желаемые параметры сортировки при создании новой базы данных или столбца базы данных.
Запрос всех доступных на сервере параметров сортировки выполняется с помощью следующей встроенной функции fn_helpcollations() :
Параметры сортировки уровня базы данных
Изменить параметры сортировки системных баз данных можно только путем изменения параметров сортировки сервера.
После создания базы данных в База данных SQL Azure параметры сортировки изменить невозможно.
Параметры сортировки пользовательской базы данных можно изменить с помощью инструкции ALTER DATABASE следующим образом:



