Collation and Unicode SupportCollation and Unicode Support

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Параметры сортировки SQL ServerSQL Server предоставляют свойства, управляющие правилами сортировки, учета регистра и диакритических знаков в данных.Collations in SQL ServerSQL Server provide sorting rules, case, and accent sensitivity properties for your data. Параметры сортировки, используемые с символьными типами данных, такими как char и varchar , определяют кодовую страницу и соответствующие символы, которые могут использоваться для этого типа данных.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. Независимо от того, устанавливается ли новый экземпляр SQL ServerSQL Server, восстанавливается ли база данных из резервной копии или сервер соединяется с клиентскими базами данных, важно понимать требования к языковому стандарту, знать порядок сортировки и необходимость учета регистра или диакритических знаков в данных, с которыми вы работаете.Whether you are installing a new instance of SQL ServerSQL Server, restoring a database backup, or connecting server to client databases, it is important that you understand the locale requirements, sorting order, and case and accent sensitivity of the data that you are working with. Описание того, как сформировать список доступных параметров сортировки в экземпляре SQL ServerSQL Server, см. в разделе sys.fn_helpcollations (Transact-SQL).To list the collations available on your instance of SQL ServerSQL Server, see sys.fn_helpcollations (Transact-SQL).

При выборе параметров сортировки для сервера, базы данных, столбца или выражения данным присваиваются определенные характеристики, которые влияют на многие операции в базе данных.When you select a collation for your server, database, column, or expression, you are assigning certain characteristics to your data that affects the results of many operations in the database. Например, если строится запрос с предложением ORDER BY, порядок результирующего набора может зависеть от параметров сортировки, которые применяются к базе данных, или предложения COLLATE на уровне выражения запроса.For example, when you construct a query by using ORDER BY, the sort order of your result set might depend on the collation that is applied to the database or dictated in a COLLATE clause at the expression level of the query.

Для эффективного использования поддержки параметров сортировки в SQL ServerSQL Serverнеобходимо понимать термины этого раздела и их связь с характеристиками данных.To best use collation support in SQL ServerSQL Server, you must 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 data set. Параметры сортировки определяют правила, используемые при сортировке и сравнении данных.Collations also determine the rules that sort and compare data. SQL ServerSQL 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. Данные, которые перемещаются между столбцами в форматах, отличных от Юникода, необходимо преобразовывать из исходной кодовой страницы в целевую.Data that is moved between non-Unicode columns must be converted from the source code page to the destination code page.

Результат выполнения инструкцииTransact-SQLTransact-SQL может различаться в зависимости от контекста различных баз данных, которые имеют свои параметры сортировки.Transact-SQLTransact-SQL statement results can vary when the statement is run in the context of different databases that have different collation settings. По возможности используйте стандартные параметры сортировки для всей организации.If it is possible, use a standardized collation for your organization. Тем самым не придется явно указывать параметры сортировки для каждого символа или выражения Юникода.This way, you do not have to explicitly 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. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Параметры сортировки могут учитывать регистр, диакритические знаки, тип японской азбуки, ширину символов, знаки выбора варианта.The options associated with a collation are case sensitivity, accent sensitivity, Kana-sensitivity, width sensitivity, variation-selector-sensitivity. В SQL Server 2019SQL Server 2019 появился дополнительный параметр для кодирования UTF-8.SQL Server 2019SQL Server 2019 introduces an additional option for UTF-8 encoding. Эти параметры задаются путем их добавления к имени параметров сортировки.These options are specified by appending them to the collation name. Например, параметр Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 определяет параметры сортировки с учетом диакритических знаков, регистра, типа японской азбуки, ширины символов и кодировки UTF-8.For example, this collation Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_UTF8 is case-sensitive, accent-sensitive, Kana-sensitive, width-sensitive, and UTF-8 encoded. Еще один пример: параметр Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS определяет параметры сортировки без учета регистра, без учета диакритических знаков, с учетом типа японской азбуки, с учетом ширины символов, с учетом знаков выбора варианта и с использованием кодировки не в Юникоде.As another example, this collation Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS is case-insensitive, accent-insensitive, Kana-sensitive, width-sensitive, variation-selector-sensitive and uses non-Unicode encoding. В следующей таблице описывается режим работы, связанный с этими параметрами.The following table describes the behavior associated with these various options.

ПараметрOption ОписаниеDescription
С учетом регистра (_CS)Case-sensitive (_CS) Различаются буквы верхнего и нижнего регистров.Distinguishes between uppercase and lowercase letters. При выборе этого параметра буквы нижнего регистра при сортировке ставятся перед соответствующими буквами верхнего регистра.If selected, lowercase letters sort ahead of their uppercase versions. Если этот параметр не выбран, параметры сортировки не учитывают регистр.If this option is not selected, the collation is case-insensitive. То есть при сортировке SQL ServerSQL Server считает буквы верхнего и нижнего регистров и делает их идентичными друг другу.That is, SQL ServerSQL Server considers the uppercase and lowercase versions of letters to be identical for sorting purposes. Можно явно выбрать нечувствительность к регистру, указав параметр _CI.You can explicitly select case insensitivity by specifying _CI.
С учетом диакритических знаков (_AS)Accent-sensitive (_AS) Различаются символы с диакритическими знаками и без них.Distinguishes between accented and unaccented characters. Например, "a" отлично от "ấ".For example, 'a' is not equal to 'ấ'. Если этот параметр не выбран, параметры сортировки не учитывают диакритические знаки.If this option is not selected, the collation is accent-insensitive. То есть при сортировке SQL ServerSQL Server рассматривает варианты букв с диакритическими знаками и без них как идентичные.That is, SQL ServerSQL Server considers the accented and unaccented versions of letters to be identical for sorting purposes. Можно явно выбрать нечувствительность к диакритическим знакам, указав параметр _АI.You can explicitly select accent insensitivity by specifying _AI.
С учетом типа японской азбуки (_KS)Kana-sensitive (_KS) Различаются два вида японской азбуки: хирагана и катакана.Distinguishes between the two types of Japanese kana characters: Hiragana and Katakana. Если данный параметр не выбран, параметр сортировки не чувствителен к типу японской азбуки.If this option is not selected, the collation is Kana-insensitive. То есть при сортировке SQL ServerSQL Server рассматривает символы хирагана и катакана как идентичные.That is, SQL ServerSQL Server considers Hiragana and Katakana characters to be equal for sorting purposes. Пропуск этого параметра является единственным способом указания нечувствительности к типу японской азбуки.Omitting this option is the only method of specifying Kana-insensitivity.
С учетом ширины символов (_WS)Width-sensitive (_WS) Отличия между символами полной ширины и средней ширины.Distinguishes between full-width and half-width characters. Если данный параметр не выбран, SQL ServerSQL Server принимает отображение одного и того же символа полной ширины и средней ширины для целей сортировки как идентичное.If this option is not selected, SQL ServerSQL 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.
С учетом знаков выбора варианта (_VSS)Variation-selector-sensitive (_VSS) Различаются различные идеографические знаки выбора варианта в японских параметрах сортировки Japanese_Bushu_Kakusu_140 и Japanese_XJIS_140, впервые представленных в SQL Server 2017 (14.x)SQL Server 2017 (14.x).Distinguishes between various ideographic variation selectors in Japanese collations Japanese_Bushu_Kakusu_140 and Japanese_XJIS_140 first introduced in SQL Server 2017 (14.x)SQL Server 2017 (14.x). Последовательность вариантов состоит из базового знака и дополнительного знака выбора вариантов.A variation sequence consists of a base character plus an additional variation selector. Если этот параметр _VSS не выбран, параметры сортировки не учитывают знак выбора вариантов, а сам знак выбора вариантов не учитывается при сравнении.If this _VSS option is not selected, the collation is variation selector insensitive, and the variation selector is not considered in the comparison. То есть при сортировке SQL Server считает символы, основанные на одном базовом символе, но с разными знаками выбора вариантов, равнозначными.That is, SQL Server considers characters built upon the same base character with differing variation selectors to be identical for sorting purposes. См. также статью Unicode Ideographic Variation Database(База данных идеографических вариантов Юникода).See also Unicode Ideographic Variation Database.

Параметры сортировки с учетом знаков выбора варианта (_VSS) не поддерживаются в полнотекстовых индексах.Variation selector sensitive (_VSS) collations are not supported in Full-text search indexes. Полнотекстовые индексы поддерживают только параметры с учетом диакритических знаков (_AS), типа японской азбуки (_KS) и ширины символов (_WS).Full-text search indexes support only Accent-Sensitive (_AS), Kana-sensitive (_KS), and Width-sensitive (_WS) options. Подсистемы CLR и XML в SQL Server не поддерживают знаки выбора варианта (_VSS).SQL Server XML and CLR engines do not support (_VSS) Variation selectors.
UTF-8 (_UTF8)UTF-8 (_UTF8) Позволяет хранить данные в кодировке UTF-8 в SQL ServerSQL Server.Enables UTF-8 encoded data to be stored in SQL ServerSQL Server. Если этот параметр не выбран, SQL ServerSQL Server использует формат кодировки по умолчанию (не в Юникоде) для подходящих типов данных.If this option is not selected, SQL ServerSQL Server uses the default non-Unicode encoding format for the applicable data types.

SQL ServerSQL Server поддерживает следующие наборы параметров сортировки:supports the following collation sets:

параметры сортировки WindowsWindows collations

Параметры сортировки Windows определяют правила хранения символьных данных на основе соответствующей локали системы Windows.Windows collations define rules for storing character data that are based on an associated Windows system locale. Для параметров сортировки Windows сравнение данных в формате, отличном от Юникода, реализовано с помощью такого же алгоритма, как и для данных в Юникоде.For a Windows collation, comparison of non-Unicode data is implemented by using the same algorithm as Unicode data. Базовые правила параметров сортировки Windows задают алфавит или язык, используемый при сортировке по словарю, а также кодовую страницу, используемую для хранения символьных данных не в Юникоде.The base Windows collation rules specify which alphabet or language is used when dictionary sorting is applied, and the code page that is used to store non-Unicode character data. Сортировка в Юникоде и в других форматах совместима со строковым сравнением в соответствующей версии Windows.Both Unicode and non-Unicode sorting are compatible with string comparisons in a particular version of Windows. Тем самым обеспечивается согласованность обработки различных типов данных в SQL ServerSQL Server, а разработчики получают возможность сортировать строки в приложениях по тем же правилам, что и в SQL ServerSQL Server.This provides consistency across data types within SQL ServerSQL Server, and it also lets developers sort strings in their applications by using the same rules that are used by SQL ServerSQL Server. Дополнительные сведения см. в разделе Имя параметров сортировки Windows (Transact-SQL).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 are case sensitive. Параметры двоичной сортировки в SQL ServerSQL Server определяют используемый языковой стандарт и кодовую страницу ANSI.A binary collation in SQL ServerSQL Server defines the locale and the ANSI code page that is used. При этом принудительно реализуется двоичный порядок сортировки.This enforces a binary sort order. По причине своей относительной простоты параметры двоичной сортировки помогают повысить производительность приложений.Because they are relatively simple, binary collations help improve application performance. Для типов данных не в Юникоде сравнение данных производится на основе кодовых точек, определенных кодовой страницей ANSI.For non-Unicode data types, data comparisons are based on the code points that are defined in 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 is not considered in data sorts. Например, параметры сортировки Latin_1_General_BIN и Japanese_BIN дают одинаковые результаты сортировки, если используются с данными в Юникоде.For example, Latin_1_General_BIN and Japanese_BIN yield identical sorting results when they are used on Unicode data.

В SQL ServerSQL Serverсуществует два типа двоичной сортировки: старая сортировка BIN и новая сортировка BIN2 .There are two types of binary collations in SQL ServerSQL Server; the older BIN collations and the newer BIN2 collations. В сортировке BIN2 все символы сортируются в соответствии с их кодовыми точками.In a BIN2 collation all characters are sorted according to their code points. В сортировке BIN только первый символ сортируется в соответствии с кодовой точкой, остальные символы сортируются в соответствии с их значениями байта.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. (Так как платформа Intel не всегда является архитектурой по порядку следования байтов, символы кода Unicode всегда хранятся с перестановкой байт).(Because the Intel platform is a little endian architecture, Unicode code characters are always stored byte-swapped.)

параметры сортировки SQL ServerSQL Server collations

Параметры сортировки SQL ServerSQL Server (SQL_*) имеют обратную совместимость с более ранними версиями SQL ServerSQL Server, с точки зрения порядка сортировки.SQL ServerSQL Server collations (SQL_*) provide sort order compatibility with earlier versions of SQL ServerSQL Server. Правила сортировки словаря для данных в формате, отличном от Юникода, не совместимы ни с какими процедурами сортировки операционных систем Windows.The dictionary sorting rules for non-Unicode data are incompatible with any sorting routine that is provided by Windows operating systems. Однако сортировка данных в Юникоде совместима с правилами сортировки определенной версии Windows.However, sorting Unicode data is compatible with a particular version of Windows sorting rules. Так как параметры сортировки SQL ServerSQL Server применяют для данных в Юникоде и других форматах разные правила сравнения, при сравнении одних и тех же данных получаются разные результаты, которые зависят от базового типа данных.Because SQL ServerSQL 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. Дополнительные сведения см. в разделе Имя параметров сортировки SQL Server (Transact-SQL).For more information, see SQL Server Collation Name (Transact-SQL).

Примечание

При обновлении англоязычной версии экземпляра SQL ServerSQL Server можно задать параметры сортировки SQL ServerSQL Server (SQL_*), чтобы обеспечить совместимость с существующими экземплярами SQL ServerSQL Server.When you upgrade an English-language instance of SQL ServerSQL Server, SQL ServerSQL Server collations (SQL_*) can be specified for compatibility with existing instances of SQL ServerSQL Server. Поскольку для экземпляра SQL ServerSQL Server параметры сортировки по умолчанию определяются во время установки, очень важно правильно настроить параметры сортировки в следующих случаях.Because the default collation for an instance of SQL ServerSQL Server is defined during setup, make sure that you specify collation settings carefully when the following are true:

  • Код приложения зависит от поведения предыдущих параметров сортировки SQL ServerSQL Server .Your application code depends on the behavior of previous SQL ServerSQL Server collations.
  • Необходимо хранить символьные данные, в которых используется несколько языков.You must store character data that reflects multiple languages.

Настройка параметров сортировки поддерживается на следующих уровнях экземпляра SQL ServerSQL Server.Setting collations are supported at the following levels of an instance of SQL ServerSQL Server:

Параметры сортировки уровня сервераServer-level collations

Параметры сортировки сервера по умолчанию, выбранные в процессе установки SQL ServerSQL Server , становятся параметрами сортировки по умолчанию для системных баз данных и всех пользовательских баз данных.The default server collation is set during SQL ServerSQL Server setup, and also becomes the default collation of the system databases and all user databases. Обратите внимание, что параметры сортировки исключительно в Юникоде не выбираются во время установки SQL ServerSQL Server , поскольку они не поддерживаются как параметры сортировки на уровне сервера.Note that Unicode-only collations cannot be selected during SQL ServerSQL Server setup because they are not supported as server-level collations.

После назначения параметров сортировки серверу, изменить параметры можно будет только с помощью экспорта объектов базы данных, перестроения базы данных master и импорта всех объектов и данных базы данных.After a collation has been assigned to the server, you cannot change the collation except by exporting all database objects and data, rebuilding the master database, and importing all database objects and data. Вместо изменения параметров сортировки по умолчанию для экземпляра SQL ServerSQL Serverможно задать желаемые параметры сортировки при создании новой базы данных или столбца базы данных.Instead of changing the default collation of an instance of SQL ServerSQL Server, you can specify the desired collation at the time that you create a new database or database column.

Параметры сортировки уровня базы данныхDatabase-level collations

При создании или изменении базы данных можно задать параметры ее сортировки по умолчанию с помощью предложения COLLATE в инструкции CREATE DATABASE или ALTER DATABASE.When a database is created or modified, 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 cannot change the collation of system databases except by changing the collation for the server.

Параметры сортировки базы данных используются для всех метаданных в базе данных, а также по умолчанию для всех строковых столбцов, временных объектов, имен переменных и любых других строковых объектов в базе данных.The database collation is used for all metadata in the database, and 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. Временные таблицы всегда хранятся в системной базе данных tempdb, которая использует параметры сортировки экземпляра.Temporary tables are always stored in the tempdb system database, which uses the collation for the instance. Запросы, сравнивающие символьные данные в пользовательской базе данных и tempdb , могут завершиться ошибкой, если параметры сортировки вызовут конфликт при оценке таких данных.Queries that compare character data between the user database and tempdb may fail if the collations cause a conflict in evaluating the character data. Можно решить эту проблему, указав в запросе предложение COLLATE.You can resolve this by specifying the COLLATE clause in the query. Дополнительные сведения см. в разделе COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Примечание

После создания базы данных в База данных SQL AzureAzure SQL Database параметры сортировки невозможно изменить.Collation cannot be changed after database has been created on База данных SQL AzureAzure SQL Database.

Параметры сортировки уровня столбцовColumn-level collations

При создании или изменении таблицы можно указать параметры сортировки для каждого столбца символьной строки с помощью предложения COLLATE.When you create or alter a table, you can specify collations for each character-string column by using the COLLATE clause. Если параметры сортировки не указаны, то столбцу присваиваются параметры сортировки по умолчанию для базы данных.If no collation is specified, the column is assigned the default collation of the database.

Параметры сортировки уровня выраженийExpression-level collations

Параметры сортировки уровня выражения задаются при выполнении инструкции, и они влияют на способ возврата результирующего набора.Expression-level collations are set when a statement is run, and they affect the way a result set is returned. Это позволяет определить результаты сортировки предложения ORDER BY в соответствии с конкретным языковым стандартом.This enables ORDER BY sort results to be locale-specific. Для реализации параметров сортировки уровня выражения предложение COLLATE применяется следующим образом.Use a COLLATE clause such as the following to implement expression-level collations:

SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;    

ЛокальLocale

Локаль представляет собой набор сведений, связанных с местоположением или с культурой.A locale is a set of information that is associated with a location or a culture. В нее может входить имя и идентификатор языка, скрипт, применяемый для записи на нем, а также национальные стандарты.This can include the name and identifier of the spoken language, the script that is used to write the language, and cultural conventions. Параметры сортировки могут быть ассоциированы с одним или несколькими локалями.Collations can be associated with one or more locales. Дополнительные сведения см. в разделе Номера локалей, назначаемые Microsoft.For more information, see Locale IDs Assigned by Microsoft.

Code PageCode Page

Кодовая страница — это упорядоченный набор символов данного скрипта, в котором числовой индекс или значение кодовой точки связано с каждым символом.A code page is an ordered set of characters of a given script in which a numeric index, or code point value, is associated with each character. Кодовую страницу Windows обычно называют набором символов или кодировкой.A Windows code page is typically referred to as a character set or charset. Кодовые страницы обеспечивают поддержку кодировок и раскладок клавиатуры, применяемых в различных локалях системы Windows.Code pages are used to provide support for the character sets and keyboard layouts that are used by different Windows system locales.

Sort OrderSort Order

Порядок сортировки устанавливает способ сортировки значений данных.Sort order specifies how data values are sorted. Это влияет на результаты сравнения данных.This affects the results of data comparison. Данные сортируются с помощью параметров сортировки, и ее можно оптимизировать с помощью индексов.Data is sorted by using collations, and it can be optimized by using indexes.

Поддержка ЮникодаUnicode Support

Юникод — это стандартный способ сопоставления кодовой точки символам.Unicode is a standard for mapping code points to characters. Поскольку он разработан для поддержки всех символов всех языков, различные кодовые страницы для поддержки разных наборов символов больше не требуются.Because it is designed to cover all the characters of all the languages of the world, there is no need for different code pages to handle different sets of characters.

Кодовая страница, используемая клиентом, определяется параметрами операционной системы.The code pages that a client uses are determined by the operating system settings. Чтобы установить кодовую страницу клиента в операционной системе Windows, используйте раздел Язык и региональные стандарты на панели управления.To set client code pages on the Windows operating system, use Regional Settings in Control Panel.

Типы данных, отличные от Юникода, имеют значительные ограничения.Significant limitations are associated with non-Unicode data types. Это происходит по той причине, что на компьютере, где не применяется Юникод, можно использовать только одну кодовую страницу.This is because a non-Unicode computer is limited to use of a single code page. Применение Юникода позволяет повысить производительность, поскольку требуется выполнять меньше преобразований кодовых страниц.You might experience performance gain by using Unicode because fewer code-page conversions are required. Параметры сортировки в Юникоде следует выбирать индивидуально на уровне базы данных, столбца или выражения, так как они не поддерживаются на уровне сервера.Unicode collations must be selected individually at the database, column, or expression level because they are not supported at the server level.

При переносе данных из сервера на клиент старые клиентские драйверы могут не распознать параметры сортировки сервера.When you move data from a server to a client, your server collation might not be recognized by older client drivers. Это может произойти при передаче данных с сервера с поддержкой Юникода на клиент без поддержки Юникода.This can occur when you move data from a Unicode server to a non-Unicode client. Лучшим вариантом может быть обновление операционной системы клиента, чтобы обновить параметры сортировки базовой системы.Your best option might be to upgrade the client operating system so that the underlying system collations are updated. Если на клиенте установлена клиентская программа базы данных, можно попробовать применить обновление службы к клиентской программе базы данных.If the client has database client software installed, you might consider applying a service update to the database client software.

Совет

Можно также попробовать использовать другие параметры сортировки для данных на сервере.You can also try to use a different collation for the data on the server. Выберите параметры сортировки, соответствующие кодовой странице в клиенте.Choose a collation that maps to a code page on the client.

Для хранения символьных данных на нескольких языках в SQL ServerSQL ServerSQL Server 2005 (9.x)SQL Server 2005 (9.x) по SQL Server 2017SQL Server 2017) используйте типы данных в Юникоде (nchar, nvarchar и ntext). Не используйте другие типы данных (char, varchar и text).If you store character data that reflects multiple languages in SQL ServerSQL Server (SQL Server 2005 (9.x)SQL Server 2005 (9.x) through SQL Server 2017SQL Server 2017), use Unicode data types (nchar, nvarchar, and ntext) instead of non-Unicode data types (char, varchar, and text).

Примечание

Для типов данных в Юникоде Компонент Database EngineDatabase Engine может представить до 65 535 символов с помощью UCS-2 или полный диапазон Юникода (1 114 111 символов), если используются дополнительные символы.For Unicode data types, the Компонент Database EngineDatabase Engine can represent up to 65,535 characters using UCS-2, or the full Unicode range (‭1,114,111‬ characters) if supplementary characters are used. Дополнительные сведения о включении дополнительных символов см. в разделе Дополнительные символы.For more information on enabling supplementary characters, see Supplementary Characters.

Кроме того, начиная с SQL Server 2019SQL Server 2019, если используется сортировка UTF-8 (_UTF8), то предыдущие типы данных, отличные от Юникода, (char и varchar) становятся типами данных Юникода (UTF-8).Alternatively, starting with SQL Server 2019SQL Server 2019, if a UTF-8 enabled collation (_UTF8) is used, then previously non-Unicode data types (char and varchar) become Unicode (UTF-8) data types. В SQL Server 2019SQL Server 2019 не изменяется поведение ранее существующих типов данных (nchar, nvarchar и ntext) Юникода (UTF-16).SQL Server 2019SQL Server 2019 does not change the behavior of previously existing Unicode (UTF-16) data types (nchar, nvarchar, and ntext). Дополнительные сведения см. в разделе о различиях в хранении UTF-8 и UTF-16.See Storage differences between UTF-8 and UTF-16 for further details.

Чтобы воспользоваться доступными в SQL ServerSQL ServerSQL Server 2012 (11.x)SQL Server 2012 (11.x) по SQL Server 2017SQL Server 2017) параметрами сортировки UTF-16 для оптимизации поиска и сортировки некоторых символов Юникода (только параметры сортировки Windows), можно выбрать один из параметров сортировки с поддержкой дополнительных символов (_SC) или один из параметров сортировки версии 140.To use the UTF-16 collations available in SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017) to improve searching and sorting of some Unicode characters (Windows collations only), you can select either one of the supplementary characters (_SC) collations or one of the version 140 collations.

Чтобы воспользоваться доступными в SQL Server 2019SQL Server 2019 параметрами сортировки UTF-8 для оптимизации поиска и сортировки некоторых символов Юникода (только параметры сортировки Windows), необходимо выбрать параметры сортировки для кодировки UTF-8 (_UTF8).To use the UTF-8 collations available in SQL Server 2019SQL Server 2019 to improve searching and sorting of some Unicode characters (Windows collations only), you must select UTF-8 encoding enabled collations(_UTF8).

  • Флаг UTF8 может применяться к следующим параметрам сортировки:The UTF8 flag can be applied to:

    • Параметры сортировки версии 90Version 90 collations

      Примечание

      Только когда в этой версии уже существуют дополнительные символы (_SC) или сортировка с учетом знаков выбора варианта (_VSS).Only when supplementary characters (_SC) or variation-selector-sensitive (_VSS) aware collations already exist in this version.

    • Параметры сортировки версии 100Version 100 collations
    • Параметры сортировки версии 140Version 140 collations
    • Параметры двоичной сортировки BIN21BIN21 binary collation
  • Флаг UTF8 не может применяться к следующим параметрам сортировки:The UTF8 flag cannot be applied to:

    • Параметры сортировки версии 90, которые не поддерживают дополнительные символы (_SC) или с учетом знаков выбора варианта (_VSS).Version 90 collations that don't support supplementary characters (_SC) or variation-selector-sensitive (_VSS)
    • Параметры двоичной сортировки BIN и BIN22The BIN or BIN22 binary collations
    • Параметры сортировки SQL*The SQL* collations

1 Начиная с SQL Server 2019SQL Server 2019 CTP 2.3.1 Starting with SQL Server 2019SQL Server 2019 CTP 2.3. SQL Server 2019SQL Server 2019 В CTP 3.0 параметры сортировки UTF8_BIN2 заменены на Latin1_General_100_BIN2_UTF8.CTP 3.0 replaced collation UTF8_BIN2 with Latin1_General_100_BIN2_UTF8.
2 Начиная с SQL Server 2019SQL Server 2019 CTP 2.3.2 Up to with SQL Server 2019SQL Server 2019 CTP 2.3.

Чтобы получить представление о трудностях, связанных с применением типов данных в Юникоде или не в Юникоде, протестируйте свой сценарий, измерив разницу производительности для этих двух вариантов в вашей среде.To evaluate issues that are related to using Unicode or non-Unicode data types, test your scenario to measure performance differences in your environment. Рекомендуется стандартизировать системные параметры сортировки, которые используются в организации, а там, где это возможно, — развертывать серверы и клиенты с поддержкой Юникода.It is a good practice to standardize the collation that is used on systems across your organization, and deploy Unicode servers and clients wherever possible.

Во многих случаях SQL ServerSQL Server взаимодействует с другими серверами или клиентами, поэтому в организации может использоваться несколько стандартов доступа к данным для приложений и экземпляров серверов.In many situations, SQL ServerSQL Server interacts with other servers or clients, and your organization might use multiple data access standards between applications and server instances. КлиентыSQL ServerSQL Server могут быть двух видов:SQL ServerSQL Server clients are one of two main types:

  • Клиенты с поддержкой Юникода , применяющие OLE DB и ODBC версии 3.7 или более поздних версий.Unicode clients that use OLE DB and Open Database Connectivity (ODBC) version 3.7 or a later version.
  • Клиенты без поддержки Юникода , применяющие библиотеку баз данных и ODBC версий 3.6 или более ранних версий.Non-Unicode clients that use DB-Library and ODBC version 3.6 or an earlier version.

В следующей таблице приведены сведения по применению данных на нескольких языках с различными сочетаниями серверов, поддерживающих и не поддерживающих Юникод.The following table provides information about using multilingual data with various combinations of Unicode and non-Unicode servers.

СерверServer КлиентClient Преимущества или ограниченияBenefits or Limitations
ЮникодUnicode ЮникодUnicode Так как данные в Юникоде широко используются в системе, этот сценарий обеспечивает наилучшую производительность и защиту полученных данных от повреждения.Because Unicode data is used throughout the system, this scenario provides the best performance and protection from corruption of retrieved data. Это случай применения ActiveX (ADO), OLE DB, а также ODBC версий 3.7 или более поздних версий.This is the situation with ActiveX Data Objects (ADO), OLE DB, and ODBC version 3.7 or a later version.
ЮникодUnicode Не ЮникодNon-Unicode В этом случае при перемещении данных на клиентский компьютер возможны ограничения или ошибки, особенно если сервер под управлением новой операционной системы соединяется с клиентом старой версии SQL ServerSQL Serverи под управлением старой операционной системы.In this scenario, especially with connections between a server that is running a newer operating system and a client that is running an older version of SQL ServerSQL Server, or on an older operating system, there can be limitations or errors when you move data to a client computer. Предпринимается попытка преобразовать находящиеся на сервере данные в Юникоде с помощью соответствующей кодовой страницы в клиенте, кодировка которого отлична от Юникода.Unicode data on the server tries to map to a corresponding code page on the non-Unicode client to convert the data.
Не ЮникодNon-Unicode ЮникодUnicode Это не лучшая конфигурация для работы с данными на нескольких языках.This is not an ideal configuration for using multilingual data. Невозможно записать данные в Юникоде на сервер, работающий не в Юникоде.You cannot write Unicode data to the non-Unicode server. Вероятнее всего, неполадки могут произойти при отправке данных на серверы, которые поддерживают другие кодовые страницы.Problems are likely to occur when data is sent to servers that are outside the server's code page.
Не ЮникодNon-Unicode Не ЮникодNon-Unicode В этом сценарии очень много ограничений для применения данных на нескольких языках.This is a very limiting scenario for multilingual data. Можно использовать только одну кодовую страницу.You can use only a single code page.

Дополнительные символыSupplementary Characters

Консорциум Юникода назначает каждому символу уникальную кодовую точку, лежащую в диапазоне от 000000 до 10FFFF.The Unicode Consortium allocates each character a unique code point, which is a value in the range 000000 to 10FFFF. Наиболее часто используемые символы имеют значения кодовых точек в диапазоне 000000–00FFFF (65 535 символов), умещающиеся в 8-разрядное или 16-разрядное слово в памяти и на диске.The most frequently used characters have code point values in the range 000000 to 00FFFF (65,535 characters) which fit into an 8-bit or 16-bit word in memory and on-disk. Этот диапазон обычно обозначается как основное многоязычное поле (BMP).This range is usually designated as the Basic Multilingual Plane (BMP).

При этом Консорциум Юникода установил 16 дополнительных "полей" символов, каждое с таким же размером, как у BMP.But the Unicode Consortium has established 16 additional "planes" of characters, each the same size as the BMP. Это определение обеспечивает Юникоду возможность представлять 1 114 112 символов (то есть 216 * 17 символов) в диапазоне кодовых точек 000000–10FFFF.This definition allows Unicode the potential to represent 1,114,112 characters (that is, 216 * 17 characters) within the code point range 000000 to 10FFFF. Для символов со значениями кодовых точек, превышающими 00FFFF, требуется от двух до четырех последовательных 8-разрядных слов (UTF-8) или два последовательных 16-разрядных слова (UTF-16).Characters with code point values larger than 00FFFF require two to four consecutive 8-bit words (UTF-8), or two consecutive 16-bit words (UTF-16). Эти символы, находящиеся вне BMP, называются дополнительными символами, а дополнительные последовательные 8-разрядные или 16-разрядные слова — суррогатной парой.These characters located beyond the BMP are called supplementary characters, and the additional consecutive 8-bit or 16-bit words are called surrogate pairs. Подробные сведения о дополнительных символах, суррогатах и суррогатных парах см. в стандарте Юникод.For more details about supplementary characters, surrogates, and surrogate pairs, refer to the Unicode Standard.

SQL ServerSQL Server предоставляет типы данных, такие как nchar и nvarchar, для хранения данных Юникода в диапазоне BMP (0000000–00FFFF), который Компонент Database EngineDatabase Engine кодирует с помощью UCS-2.provides data types such as nchar and nvarchar to store Unicode data in the BMP range (000000 to 00FFFF), which the Компонент Database EngineDatabase Engine encodes using UCS-2.

В SQL Server 2012 (11.x)SQL Server 2012 (11.x) появилось новое семейство параметров сортировки дополнительных символов (_SC), которое можно использоваться с типами данных nchar, nvarchar и sql_variant, чтобы представить полный диапазон символов Юникода (000000–10FFFF).SQL Server 2012 (11.x)SQL Server 2012 (11.x) introduced a new family of supplementary character (_SC) collations that can be used with the data types nchar, nvarchar, and sql_variant to represent the full Unicode character range (000000 to 10FFFF). Например: Latin1_General_100_CI_AS_SCили (при использовании параметров сортировки для японского языка) Japanese_Bushu_Kakusu_100_CI_AS_SC.For example: Latin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.

В SQL Server 2019SQL Server 2019 поддержка дополнительных символов распространяется на типы данных char и varchar в новых параметрах сортировки для UTF-8 (_UTF8).SQL Server 2019SQL Server 2019 extends supplementary character support to the data types char and varchar with the new UTF-8 enabled collations (_UTF8). Такие типы данных также способны представлять полный диапазон символов Юникода.These are also capable of representing the full Unicode character range.

Примечание

Начиная с SQL Server 2014 (12.x)SQL Server 2014 (12.x), все новые параметры сортировки _140 автоматически поддерживают дополнительные символы.Starting in SQL Server 2014 (12.x)SQL Server 2014 (12.x), all new _140 collations automatically support supplementary characters.

Если используются дополнительные символы:If you use supplementary characters:

  • Дополнительные символы могут применяться в операциях сортировки и сравнения только в параметрах сортировки с версией 90 или выше.Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.

  • Все новые параметры сортировки версии 100 поддерживают лингвистическую сортировку с обработкой дополнительных символов.All version 100 collations support linguistic sorting with supplementary characters.

  • Дополнительные символы не поддерживаются в метаданных (например, в именах объектов баз данных).Supplementary characters are not supported for use in metadata, such as in names of database objects.

  • Для баз данных, в которых используются параметры сортировки с дополнительными символами (_SC), нельзя включить репликацию SQL ServerSQL Server.Databases that use collations with supplementary characters (_SC), cannot be enabled for SQL ServerSQL Server Replication. Это связано с тем, что некоторые из системных таблиц и хранимых процедур, создаваемых для репликации, используют старый тип данных ntext, который не поддерживает дополнительные символы.This is because some of the system tables and stored procedures that are created for replication, use the legacy ntext data type, which does not support supplementary characters.

  • Флаг SC может применяться к следующим параметрам сортировки:The SC flag can be applied to:

    • Параметры сортировки версии 90Version 90 collations
    • Параметры сортировки версии 100Version 100 collations
  • Флаг SC не может применяться к следующим параметрам сортировки:The SC flag cannot be applied to:

    • Параметры сортировки Windows версии 80 и нижеVersion 80 non-versioned Windows collations
    • Параметры двоичной сортировки BIN и BIN2The BIN or BIN2 binary collations
    • Параметры сортировки SQL*The SQL* collations
    • Параметры сортировки версии 140 (им не требуется флаг SC, так как они уже поддерживают дополнительные символы)Version 140 collations (these don't need the SC flag as they already support supplementary characters)

В следующей таблице сравнивается поведение некоторых строковых функций и строковых операторов при использовании дополнительных символов с параметрами сортировки, поддерживающими дополнительные символы (SCA) и без них.The following table compares the behavior of some string functions and string operators when they use supplementary characters with and without a supplementary character-aware (SCA) collation:

Строковая функция или операторString Function or Operator С параметрами сортировки, поддерживающими дополнительные символы (SCA)With a Supplementary Character-Aware (SCA) Collation Без параметров сортировки, поддерживающих дополнительные символыWithout an SCA Collation
CHARINDEXCHARINDEX

LENLEN

PATINDEXPATINDEX
Суррогатные пары UTF-16 считаются одной кодовой точкой.The UTF-16 surrogate pair is counted as a single codepoint. Суррогатные пары UTF-16 считаются двумя кодовыми точками.The UTF-16 surrogate pair is counted as two codepoints.
LEFTLEFT

REPLACEREPLACE

REVERSEREVERSE

RIGHTRIGHT

SUBSTRINGSUBSTRING

STUFFSTUFF
Эти функции обрабатывают каждую суррогатную пару как одну кодовую точку и работают ожидаемым образом.These functions treat each surrogate pair as a single codepoint and work as expected. Эти функции могут разорвать любые суррогатные пары, что может привести к непредвиденным результатам.These functions may split any surrogate pairs and lead to unexpected results.
NCHARNCHAR Возвращает символ, соответствующий заданному значению кодовой точки в Юникоде в диапазоне от 0 до 0x10FFFF.Returns the character corresponding to the specified Unicode codepoint value in the range 0 to 0x10FFFF. Если указанное значение лежит в диапазоне от 0 до 0xFFFF, то возвращается один символ.If the value specified lies in the range 0 through 0xFFFF, one character is returned. Для больших значений возвращается соответствующая суррогатная пара.For higher values, the corresponding surrogate is returned. Если значение превышает 0xFFFF, то вместо соответствующей суррогатной пары возвращается значение NULL.A value higher than 0xFFFF returns NULL instead of the corresponding surrogate.
UNICODEUNICODE Возвращает кодовую точку UTF-16 в диапазоне от 0 до 0x10FFFF.Returns a UTF-16 codepoint in the range 0 through 0x10FFFF. Возвращает кодовую точку UCS-2 в диапазоне от 0 до 0xFFFF.Returns a UCS-2 codepoint in the range 0 through 0xFFFF.
Шаблон — совпадение одного символаMatch One Character Wildcard

Шаблон — несовпадающие символыWildcard - Character(s) Not to Match
Дополнительные символы поддерживаются для всех операций с символами-шаблонами.Supplementary characters are supported for all wildcard operations. Дополнительные символы не поддерживаются для этих операций с символами-шаблонами.Supplementary characters are not supported for these wildcard operations. Поддерживаются другие операторы символов-шаблонов.Other wildcard operators are supported.

Поддержка GB18030GB18030 Support

GB18030 — это отдельный стандарт, который применяется в Китайской Народной Республике для кодирования китайских иероглифов.GB18030 is a separate standard used in the People's Republic of China for encoding Chinese characters. В кодировке GB18030 введенные данные могут иметь длину 1, 2 или 4 байт.In GB18030, characters can be 1, 2, or 4 bytes in length. SQL ServerSQL Server предоставляет поддержку символов GB18030, распознает их при вводе из клиентского приложения, преобразуя и сохраняя в виде символов Юникода.provides support for GB18030-encoded characters by recognizing them when they enter the server from a client-side application and converting and storing them natively as Unicode characters. После сохранения на сервере эти символы при выполнении всех последующих операций рассматриваются как символы Юникода.After they are stored in the server, they are treated as Unicode characters in any subsequent operations. Можно использовать любые параметры сортировки для китайского языка. Желательно использовать последнюю версию (100).You can use any Chinese collation, preferably the latest 100 version. Все параметры сортировки уровня 100 поддерживают лингвистическую сортировку при использовании символов GB18030.All _100 level collations support linguistic sorting with GB18030 characters. Если данные содержат дополнительные символы (суррогатные пары), для оптимизации поиска и сортировки можно использовать параметры сортировки SC, доступные в SQL Server 2017SQL Server 2017 .If the data includes supplementary characters (surrogate pairs), you can use the SC collations available in SQL Server 2017SQL Server 2017 to improve searching and sorting.

Поддержка сложных скриптовComplex Script Support

SQL ServerSQL Server поддерживает ввод, хранение, изменение и отображение наборов сложных скриптов.can support inputting, storing, changing, and displaying complex scripts. Ниже приведены типы сложных скриптов:Complex scripts include the following types:

  • Скрипты с языками с различным направлением письма, например сочетание английского и арабского текстов.Scripts that include the combination of both right-to-left and left-to-right text, such as a combination of Arabic and English text.
  • Скрипты, в которых форма символов изменяется в зависимости от их положения или где сочетаются разные символы (например, в арабском, хинди, тайском).Scripts whose characters change shape depending on their position, or when combined with other characters, such as Arabic, Indic, and Thai characters.
  • Для таких языков как тайский требуются внутренние словари для распознавания слов, поскольку между словами нет пробелов.Languages such as Thai that require internal dictionaries to recognize words because there are no breaks between them.

Приложения баз данных, взаимодействующие с SQL ServerSQL Server , должны применять управляющие элементы, которые поддерживают сложные скрипты.Database applications that interact with SQL ServerSQL Server must use controls that support complex scripts. Стандартные средства управления формами Windows, которые создаются в управляемом коде, поддерживают сложные сценарии.Standard Windows form controls that are created in managed code are complex script-enabled.

Параметры сортировки для японского языка, добавленные в SQL Server 2017 (14.x)SQL Server 2017 (14.x)Japanese Collations added in SQL Server 2017 (14.x)SQL Server 2017 (14.x)

Начиная с версии SQL Server 2017 (14.x)SQL Server 2017 (14.x), поддерживаются новые семейства параметров сортировки для японского языка с перестановками различных параметров (_CS, _AS, _KS, _WS, _VSS).Starting in SQL Server 2017 (14.x)SQL Server 2017 (14.x), new Japanese collation families are supported, with the permutations of various options (_CS, _AS, _KS, _WS, _VSS).

Чтобы получить список этих параметров сортировки, можно выполнить запрос Компонент SQL Server Database EngineSQL Server Database Engine:To list these collations, you can query the Компонент SQL Server Database EngineSQL Server Database Engine:

SELECT Name, Description FROM fn_helpcollations()  
WHERE Name LIKE 'Japanese_Bushu_Kakusu_140%' OR Name LIKE 'Japanese_XJIS_140%'

Все новые параметры сортировки имеют встроенную поддержку дополнительных символов, поэтому ни у одного нового параметра сортировки _140 нет флага SC.All of the new collations have built-in support for supplementary characters, so none of the new _140 collations have (or need) the SC flag.

Эти параметры сортировки поддерживаются в индексах Компонент Database EngineDatabase Engine, оптимизированных для памяти таблицах, индексах columnstore и модулях, скомпилированных в собственном коде.These collations are supported in Компонент Database EngineDatabase Engine indexes, memory-optimized tables, columnstore indexes, and natively compiled modules.

Поддержка UTF-8UTF-8 support

SQL Server 2019SQL Server 2019 обеспечивает полную поддержку широко используемой кодировки символов UTF-8 как кодировки импорта или экспорта и как параметров сортировки на уровне столбцов и базы данных для строковых данных.introduces full support for the widely used UTF-8 character encoding as an import or export encoding, and as database-level or column-level collation for string data. Кодировка символов UTF-8 допускается в типах данных char и varchar. Она активируется при создании параметров сортировки с суффиксом UTF8 или изменении существующих параметров на такие.UTF-8 is allowed in the char and varchar data types, and is enabled when creating or changing an object's collation to a collation with the UTF8 suffix. Например, LATIN1_GENERAL_100_CI_AS_SC меняется на LATIN1_GENERAL_100_CI_AS_SC_UTF8.For example,LATIN1_GENERAL_100_CI_AS_SC to LATIN1_GENERAL_100_CI_AS_SC_UTF8.

UTF-8 доступна только для параметров сортировки Windows, которые поддерживают дополнительные символы, представленные в SQL Server 2012 (11.x)SQL Server 2012 (11.x).UTF-8 is only available to Windows collations that support supplementary characters, as introduced in SQL Server 2012 (11.x)SQL Server 2012 (11.x). Типы данных nchar и nvarchar допускают только кодировку UCS-2 или UTF-16 и остаются неизменными.nchar and nvarchar allow UCS-2 or UTF-16 encoding only, and remain unchanged.

Различия в хранении UTF-8 и UTF-16Storage differences between UTF-8 and UTF-16

Консорциум Юникода назначает каждому символу уникальную кодовую точку, лежащую в диапазоне от 000000 до 10FFFF.The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 000000 to 10FFFF. В SQL Server 2019SQL Server 2019 кодировки UTF-8 и UTF-16 могут представлять полный диапазон.With SQL Server 2019SQL Server 2019, both UTF-8 and UTF-16 encodings are available to represent the full range:

  • В кодировке UTF-8 символам в диапазоне ASCII (000000–00007F) требуется 1 байт, кодовым точкам с 000080 по 0007FF необходимо 2 байта, кодовым точкам с 000800 по 00FFFF — 3 байта и кодовым точкам 0010000–0010FFFF — 4 байта.With UTF-8 encoding, characters in the ASCII range (000000 – 00007F) require 1 byte, code points 000080 to 0007FF require 2 bytes, code points 000800 to 00FFFF require 3 bytes, and code points 0010000 to 0010FFFF require 4 bytes.
  • В кодировке UTF-16 кодовым точкам 000000–00FFFF необходимо 2 байта, а кодовым точкам 0010000–0010FFFF — 4 байта.With UTF-16 encoding, code points 000000 to 00FFFF require 2 bytes, and code points 0010000 to 0010FFFF require 4 bytes.

В следующей таблице приведены байты хранения кодировки для каждого диапазона символов и типа кодировки.The following table outlines the encoding storage bytes for each character range and encoding type:

Диапазон кода (шестнадцатеричный)Code Range (hexadecimal) Диапазон кода (десятичный)Code Range (decimal) Байтов хранения1 в UTF-8Storage bytes 1 with UTF-8 Байтов хранения1 в UTF-16Storage bytes 1 with UTF-16
000000–00007F000000 – 00007F 0–1270 - 127 11 22
000080–00009F000080 – 00009F
0000A0– 0003FF0000A0 – 0003FF
000400–0007FF000400 – 0007FF
128–159128 – 159
160–1023160 – 1,023
1024–20471,024 – 2,047
22 22
000800–003FFF000800 – 003FFF
004000–00FFFF004000 – 00FFFF
2048–16 3832,048 - 16,383
16 384–65 53516,384 – 65,535
33 22
010000–03FFFF2010000 – 03FFFF 2

040000–10FFFF2040000 – 10FFFF 2
65 536–262 143265,536 – 262,143 2

262 144–1 114 1112262,144 – 1,114,111 2
44 44

1 Байты хранения относятся к длине кодируемых байтов, а не к объему хранения на диске для соответствующего типа данных.1 The storage bytes refer to the encoded byte length, not the respective data type on-disk storage size. Дополнительные сведения об объеме хранения на диске см. в статьях о nchar и nvarchar и char и varchar.For more information about on-disk storage sizes, see nchar and nvarchar and char and varchar.

2 Диапазон кодовых точек для дополнительных символов.2 Code point range for supplementary characters.

Совет

Часто считают, что в типах данных CHAR(n) и VARCHAR(n) или NCHAR(n) и NVARCHAR(n) число n указывает на количество символов.It is common to think in CHAR(n) and VARCHAR(n), or in NCHAR(n) and NVARCHAR(n), the n defines the number of characters. Причина в том, что, например, в столбце CHAR(10) могут храниться 10 символов ASCII в диапазоне 0–127 при использовании таких параметров сортировки, как Latin1_General_100_CI_AI, так как каждый символ в этом диапазоне занимает 1 байт.This is because in the example of a CHAR(10) column, 10 ASCII characters in the range 0-127 can be stored using a collation such as Latin1_General_100_CI_AI, because each character in this range uses only 1-byte.
Но число n в CHAR(n) и VARCHAR(n) — это размер строки в байтах (0–8000), а в NCHAR(n) и NVARCHAR(n) число n — это размер строки в парах байтов (0–4000).However, in CHAR(n) and VARCHAR(n), the n defines the string size in bytes (0-8,000), while in NCHAR(n) and NVARCHAR(n) the n defines the string size in byte-pairs (0-4,000). n никогда не определяет количество хранимых символов.n never defines numbers of characters that can be stored.

Как следует из таблицы, правильный выбор кодировки Юникода и типа данных может существенно сократить объем хранимых данных, а неправильный — увеличить занимаемый объем хранилища в зависимости от используемого набора символов.As seen above, choosing the appropriate Unicode encoding and data type may provide significant storage savings or increase your current storage footprint, depending on the character set in use. Например, при использовании параметров сортировки Latin с поддержкой UTF-8, например Latin1_General_100_CI_AI_SC_UTF8, в столбце CHAR(10) могут храниться 10 байтов и помещаются 10 символов ASCII в диапазоне 0–127, но только 5 символов в диапазоне 128–2047 или 3 символа в диапазоне 2048–65 535.For example, When using a Latin collation that is UTF-8 enabled such as Latin1_General_100_CI_AI_SC_UTF8, a CHAR(10) column stores 10 bytes, and can hold 10 ASCII characters in the range 0-127, but only 5 characters in range 128-2047, and only 3 characters in range 2048-65535. Для сравнения, так как в столбце NCHAR(10) хранятся 10 пар байтов (20 байтов), в нем помещаются 10 символов в диапазоне 0–65 535.By comparison, because a NCHAR(10) column stores 10 byte-pairs (20 bytes), it can hold 10 characters in the range 0-65535.

При выборе кодировки UTF-8 или UTF-16 для базы данных или столбца примите во внимание то, как будут распределяться хранимые строковые данные.Before choosing whether to use UTF-8 or UTF-16 encoding for a database or column, consider the distribution of string data that will be stored:

  • Если это будет преимущественно диапазон ASCII 0–127 (как в случае английского языка), то каждому символу потребуется 1 байт в UTF-8 и 2 байта в UTF-16.If it is mostly in the ASCII range 0-127 (such as English), then each character requires 1-byte with UTF-8 and 2-bytes with UTF-16. Использование UTF-8 сокращает объем хранения.Using UTF-8 provides storage benefits. Изменение имеющегося типа данных столбца с символами ASCII в диапазоне 0–127 с NCHAR(10) на CHAR(10) с использованием параметров сортировки для UTF-8 на 50 % снижает требуемый объем хранилища.Changing an existing column data type with ASCII characters in the range 0-127 from NCHAR(10) to CHAR(10) using an UTF-8 enabled collation, translates into 50 percent reduction in storage requirements. Такое снижение связано с тем, что NCHAR(10) требует для хранения 20 байт, тогда как CHAR(10) требует 10 байт для представления той же строки Юникода.This reduction is because NCHAR(10) requires 20 bytes for storage, whereas CHAR(10) requires 10 bytes for the same Unicode string representation.
  • Выше диапазона ASCII практически для любого алфавита с латинскими символами, а также для греческого, кириллического, коптского, армянского, иврита, арабского, сирийского, Тана и Нко потребуется 2-байта на каждый символ в UTF-8 и UTF-16.Above the ASCII range, almost all Latin-based script, and also Greek, Cyrillic, Coptic, Armenian, Hebrew, Arabic, Syriac, Tāna and N’Ko will require 2-bytes per character in both UTF-8 and UTF-16. В таких случаях нет особой разницы в объеме хранения у сопоставимых типов данных (например, при использовании char или nchar).In these cases there aren't significant storage differences for comparable data types (for example between using char or nchar).
  • Если будут использоваться преимущественно восточно-азиатские языки (например, корейский, китайский и японский), каждому символу потребуется 3 байта в UTF-8 и 2 байта в UTF-16.If it is mostly East Asian script (such as Korean, Chinese and Japanese), then each character requires 3-bytes with UTF-8 and 2-bytes with UTF-16. В этом случае использование UTF-16 позволяет сократить объем хранения.Using UTF-16 provides storage benefits.
  • Символам в диапазоне 010000–10FFFF требуется 4 байта, как в кодировке UTF-8, так и в UTF-16.Characters in the 010000 to 10FFFF range require 4-bytes in both UTF-8 and UTF-16. В таких случаях нет разницы в объеме хранения у сопоставимых типов данных (например, при использовании char или nchar).In these cases there aren't storage differences for comparable data types (for example between using char or nchar).

Сведения о других факторах, которые необходимо учитывать, см. в статье Написание инструкций Transact-SQL, адаптированных к международному использованию.For other considerations, see Write International Transact-SQL Statements.

ЗадачаTask РазделTopic
Описание задания или изменения параметров сортировки экземпляра SQL Server.Describes how to set or change the collation of the instance of SQL Server. Задание или изменение параметров сортировки сервераSet or Change the Server Collation
Описание задания или изменения параметров сортировки пользовательской базы данных.Describes how to set or change the collation of a user database. Установка и изменение параметров сортировки базы данныхSet or Change the Database Collation
Описание задания или изменения параметров сортировки столбца в базе данных.Describes how to set or change the collation of a column in the database. Задание или изменение параметров сортировки столбцаSet or Change the Column Collation
Описание способа возврата сведений о параметрах сортировки на уровне сервера, базы данных или столбца.Describes how to return collation information at the server, database, or column level. Просмотр сведений о параметрах сортировкиView Collation Information
Описывается способ написания инструкций Transact-SQL, которые имеют большую степень языковой переносимости или лучше поддерживают несколько языков.Describes how to write Transact-SQL statements that are more portable from one language to another, or support multiple languages more easily. Написание инструкций Transact-SQL, адаптированных к международному использованиюWrite International Transact-SQL Statements
Описание способа изменения языка сообщений об ошибках и параметров отображения времени и валюты.Describes how to change the language of error messages and preferences for how date, time, and currency data are used and displayed. Задание языка сеансаSet a Session Language

Рекомендованные изменения параметров сортировки SQL Server SQL Server Best Practices Collation Change
Использование символьного формата Юникод для импорта и экспорта данных (SQL Server) Use Unicode Character Format to Import or Export Data (SQL Server)
Написание инструкций Transact-SQL, адаптированных к международному использованию Write International Transact-SQL Statements
Рекомендации по миграции SQL Server на Юникод — больше не поддерживаются"SQL Server Best Practices Migration to Unicode" - No longer maintained
Веб-сайт консорциума Юникод Unicode Consortium Web site
Стандарт Юникод Unicode Standard
Поддержка UTF-8 в драйвере OLE DB для SQL ServerUTF-8 Support in OLE DB Driver for SQL Server
Блог с общими сведениями о поддержке UTF-8 для SQL ServerBlog Introducing UTF-8 support for SQL Server

См. также:See Also

Параметры сортировки автономной базы данных Contained Database Collations
Выбор языка при создании полнотекстового индекса Choose a Language When Creating a Full-Text Index
sys.fn_helpcollations (Transact-SQL)sys.fn_helpcollations (Transact-SQL)