Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметры сортировки в SQL Server обеспечивают свойства для правил сортировки, а также для учета регистра и диакритических знаков в ваших данных. Параметры сортировки, используемые с типами символьных данных, такими как char и varchar, определяют кодовую страницу и соответствующие символы, которые могут быть представлены для этого типа данных. Независимо от того, устанавливаете ли вы новый экземпляр SQL Server, восстанавливаете резервную копию базы данных или подключаете сервер к клиентским базам данных, важно понимать требования языкового стандарта, порядок сортировки, а также чувствительность к регистру и акцентам данных, с которыми вы будете работать. Для получения списка параметров сортировки, доступных в экземпляре SQL Server, см. функцию sys.fn_helpcollations (Transact-SQL).
При выборе параметров сортировки для сервера, базы данных, столбца или выражения вы назначаете определенные характеристики данным, которые повлияют на результаты многих операций в базе данных. Например, при создании запроса с помощью ORDER BY порядок сортировки результирующий набор может зависеть от параметров сортировки, применяемых к базе данных или диктуемых в предложении COLLATE на уровне выражения запроса.
Чтобы лучше использовать поддержку сортировки в SQL Server, необходимо понять термины, определенные в этом разделе, и как они связаны с характеристиками данных.
Сопоставление
Параметры сортировки указывают битовые шаблоны, представляющие каждый символ в наборе данных. Параметры сортировки определяют правила, используемые при сортировке и сравнении данных. SQL Server поддерживает хранение объектов с различными параметрами сортировки в одной базе данных. Для столбцов в кодировке, отличающейся от Юникода, настройка параметров сортировки определяет кодовую страницу данных и соответствующую возможность представления символов. Данные, перемещаемые между столбцами, отличными от Юникода, должны быть преобразованы с исходной кодовой страницы на целевую кодовую страницу.
Результаты инструкции Transact-SQL могут различаться при выполнении инструкции в контексте разных баз данных, имеющих разные параметры сортировки. Если это возможно, используйте стандартизованную сортировку для вашей организации. Таким образом, не нужно явно указывать параметры сортировки в каждом символе или выражении Юникода. Если необходимо работать с объектами, имеющими различные параметры сортировки и кодовые страницы, создание запросов должно производиться с учетом очередности параметров сортировки. Дополнительные сведения см. в разделе "Приоритет сортировки" (Transact-SQL).
Параметры, связанные с сортировкой, — чувствительность к регистру, чувствительность к акцентам, чувствительность к знакам каны, чувствительность к ширине. Эти параметры задаются путем добавления их в имя сортировки. Например, этот параметр сортировки Japanese_Bushu_Kakusu_100_CS_AS_KS_WS чувствителен к регистру, акцентам, кана и ширине. В следующей таблице описывается поведение, связанное с этими параметрами.
| Вариант | Описание |
|---|---|
| С учетом регистра (_CS) | Различаются буквы верхнего и нижнего регистров. Если выбрано, строчные буквы сортируются перед версиями верхнего регистра. Если этот параметр не выбран, параметры сортировки будут нечувствительными к регистру. То есть при сортировке SQL Server считает буквы верхнего и нижнего регистров идентичными друг другу. Можно явно выбрать нечувствительность к регистру, указав параметр _CI. |
| С учетом диакритических знаков (_AS) | Различаются символы с диакритическими знаками и без них. Например, "a" не равно "ấ". Если этот параметр не выбран, параметры сортировки будут нечувствительными. То есть, при сортировке SQL Server считает буквы с диакритическими знаками и без них идентичными друг другу. Можно явно выбрать нечувствительность к диакритическим знакам, указав параметр _АI. |
| С учетом типа японской азбуки (_KS) | Различаются два вида японской азбуки: хирагана и катакана. Если этот параметр не выбран, сортировка не учитывает символы каны. То есть, при сортировке SQL Server рассматривает символы хирагана и катакана как идентичные. Опущение этого параметра является единственным методом указания нечувствительности Kana. |
| С учетом ширины символов (_WS) | Отличия между символами полной ширины и средней ширины. Если этот параметр не выбран, SQL Server считает представление полной ширины и половины ширины одного и того же символа идентичным для целей сортировки. Пропуск этого параметра является единственным способом указания нечувствительности к ширине символов. |
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 дают идентичные результаты сортировки при использовании в данных Юникода.
В SQL Server существует два типа двоичных параметров сортировки; старые BIN параметры сортировки и новые BIN2 параметры сортировки. В сортировке BIN2 все символы сортируются в соответствии с их кодовых точек. В упорядочивании BIN только первый символ сортируется по кодовой точке, а следующие символы сортируются в соответствии со значениями байтов. (Так как платформа Intel — это небольшая архитектура, символы кода Юникода всегда хранятся в байтах.)
Параметры сортировки SQL Server
Параметры сортировки SQL Server (SQL_*) обеспечивают совместимость порядка сортировки с более ранними версиями SQL Server. Правила сортировки словаря для данных, отличных от Юникода, несовместимы с любой подпрограммой сортировки, предоставляемой операционными системами Windows. Однако сортировка данных в Юникоде совместима с правилами сортировки определенной версии Windows. Поскольку параметры сортировки SQL Server используют разные правила сравнения для неюнкодных и юникодных данных, результаты сравнения одинаковых данных будут различаться в зависимости от базового типа данных. Дополнительные сведения см. в разделе «Имя сортировки SQL Server» (Transact-SQL).
Замечание
При обновлении экземпляра SQL Server на английском языке параметры сортировки SQL Server (SQL_*) можно указать для совместимости с существующими экземплярами SQL Server. Так как параметры сортировки по умолчанию для экземпляра SQL Server определены во время установки, убедитесь, что параметры сортировки указываются тщательно, если заданы следующие значения:
- Код приложения зависит от поведения предыдущих параметров сортировки SQL Server.
- Необходимо хранить символьные данные, в которых используется несколько языков.
Параметры сортировки поддерживаются на следующих уровнях экземпляра SQL Server:
Параметры сортировки уровня сервера
Параметры сортировки сервера по умолчанию задаются во время установки SQL Server, а также становятся параметрами сортировки по умолчанию системных баз данных и всех пользовательских баз данных. Обратите внимание, что параметры сортировки только для Юникода нельзя выбрать во время установки SQL Server, так как они не поддерживаются в качестве параметров сортировки на уровне сервера.
После того, как сортировка была назначена серверу, вы не можете изменить её, за исключением экспорта всех объектов и данных базы данных, перестроения master базы данных и импорта всех объектов и данных. Вместо изменения параметров сортировки по умолчанию экземпляра SQL Server можно указать требуемые параметры сортировки во время создания новой базы данных или столбца базы данных.
Параметры сортировки уровня базы данных
При создании или изменении базы данных можно использовать предложение COLLATE инструкции CREATE DATABASE или ALTER DATABASE, чтобы указать параметры сортировки базы данных по умолчанию. Если параметры сортировки не указаны, базе данных назначаются параметры сортировки сервера.
Невозможно изменить параметры сортировки системных баз данных, за исключением изменения параметров сортировки сервера.
Параметры сортировки базы данных используются для всех метаданных в базе данных и используются по умолчанию для всех строковых столбцов, временных объектов, имен переменных и других строк, используемых в базе данных. Когда вы изменяете сортировку базы данных пользователя, могут возникнуть конфликты сортировки, кода запросы в базе данных получают доступ к временным таблицам. Временные таблицы всегда хранятся в tempdb системной базе данных, которая будет использовать коллацию для экземпляра. Запросы, которые сравнивают символьные данные между пользовательской базой данных и tempdb, могут завершиться неудачей, если параметры сортировки вызывают конфликт при сравнении символьных данных. Это можно устранить, указав предложение COLLATE в запросе. Для получения дополнительной информации см. COLLATE (Transact-SQL).
Параметры сортировки уровня столбцов
При создании или изменении таблицы можно указать параметры сортировки для каждого столбца строки символов с помощью предложения COLLATE. Если параметр сортировки не задан, столбец получает параметр сортировки по умолчанию базы данных.
Параметры сортировки уровня выражений
Параметры сортировки уровня выражения задаются при выполнении инструкции, и они влияют на способ возврата результирующего набора. Это позволяет сортировать результаты ORDER BY с учетом языкового стандарта. Используйте предложение COLLATE, например следующее, для реализации параметров сортировки на уровне выражений:
SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;
Региональные настройки
Локаль — это набор сведений, связанных с расположением или культурой. Это может включать имя и идентификатор языка, скрипт, используемый для написания языка и культурных соглашений. Параметры сортировки могут быть ассоциированы с одним или несколькими локалями. Дополнительные сведения см. в разделе Номера локалей, назначаемые Microsoft.
Кодовая страница
Кодовая страница — это упорядоченный набор символов данного скрипта, в котором числовой индекс или значение кодовой точки связано с каждым символом. Кодовая страница Windows обычно называется набором символов или символьным набором. Кодовые страницы обеспечивают поддержку кодировок и раскладок клавиатуры, применяемых в различных локалях системы Windows.
Порядок сортировки
Порядок сортировки устанавливает способ сортировки значений данных. Это влияет на результаты сравнения данных. Данные сортируются с помощью параметров сортировки, и ее можно оптимизировать с помощью индексов.
Поддержка Юникода
Юникод — это стандартный способ сопоставления кодовой точки символам. Так как он предназначен для покрытия всех символов всех языков мира, нет необходимости обрабатывать различные кодовые страницы для обработки различных наборов символов. Если вы храните символьные данные, которые отражают несколько языков, всегда используйте типы данных Юникода (nchar, nvarcharиntext) вместо типов данных, отличных от Юникода (charvarcharи).text
Типы данных, отличные от Юникода, имеют значительные ограничения. Это связано с тем, что компьютер, отличный от Юникода, будет ограничен использованием одной кодовой страницы. Вы можете повысить производительность с помощью Юникода, так как требуется меньше преобразования кодовой страницы. Параметры сортировки Юникода должны быть выбраны отдельно на уровне базы данных, столбца или выражения, так как они не поддерживаются на уровне сервера.
Кодовые страницы, которые использует клиент, определяются параметрами операционной системы. Чтобы установить кодовую страницу клиента в операционной системе Windows, используйте раздел Язык и региональные стандарты на панели управления.
При переносе данных из сервера на клиент старые клиентские драйверы могут не распознать параметры сортировки сервера. Это может произойти при передаче данных с сервера с поддержкой Юникода на клиент без поддержки Юникода. Лучшим вариантом может быть обновление операционной системы клиента, чтобы обновить параметры сортировки базовой системы. Если на клиенте установлена клиентская программа базы данных, можно попробовать применить обновление службы к клиентской программе базы данных.
Можно также попробовать использовать другие параметры сортировки для данных на сервере. Выберите параметры сортировки, которые будут сопоставляться с кодовой страницей клиента.
Чтобы использовать параметры сортировки UTF-16, доступные в SQL Server 2019 (15.x), можно выбрать один из дополнительных символов _SC сортировки (только параметры сортировки Windows) для улучшения поиска и сортировки некоторых символов Юникода.
Чтобы получить представление о трудностях, связанных с применением типов данных в Юникоде или не в Юникоде, протестируйте свой сценарий, измерив разницу производительности для этих двух вариантов в вашей среде. Рекомендуется стандартизировать параметры сортировки, используемые в системах в вашей организации, и развертывать серверы и клиенты Юникода везде, где это возможно.
Во многих ситуациях SQL Server будет взаимодействовать с другими серверами или клиентами, и ваша организация может использовать несколько стандартов доступа к данным между приложениями и экземплярами серверов. Клиенты SQL Server являются одним из двух основных типов:
Клиенты Юникода , использующие OLE DB и Open Database Connectivity (ODBC) версии 3.7 или более поздней версии.
Клиенты, отличные от Юникода , использующие DB-Library и ODBC версии 3.6 или более раннюю версию.
В следующей таблице приведена информация об использовании многоязычных данных с различными комбинациями серверов Юникода и серверов без Юникода.
| Сервер | Клиент | Преимущества или ограничения |
|---|---|---|
| Юникод | Юникод | Так как данные Юникода будут использоваться во всей системе, этот сценарий обеспечивает лучшую производительность и защиту от повреждения извлеченных данных. Это ситуация с объектами данных ActiveX (ADO), OLE DB и ODBC версии 3.7 или более поздней. |
| Юникод | Не Юникод | В этом сценарии, особенно при подключении между сервером, работающим под управлением более новой операционной системы, и клиентом, работающим под управлением более старой версии SQL Server или более старой операционной системы, при перемещении данных на клиентский компьютер могут возникнуть ограничения или ошибки. Данные Юникода на сервере попытаются сопоставить с соответствующей кодовой страницей на клиенте, не поддерживающем Юникод, для преобразования данных. |
| Не Юникод | Юникод | Это не идеальная конфигурация для использования многоязычных данных. Нельзя записывать данные Юникода на сервер, не поддерживающий Юникод. Вероятнее всего, неполадки могут произойти при отправке данных на серверы, которые поддерживают другие кодовые страницы. |
| Не Юникод | Не Юникод | В этом сценарии очень много ограничений для применения данных на нескольких языках. Можно использовать только одну кодовую страницу. |
Дополнительные символы
SQL Server предоставляет такие типы данных, как nchar и nvarchar, для хранения данных в Юникоде. Эти типы данных кодируют текст в формате UTF-16. Консорциум Юникода выделяет каждому символу уникальный кодовый пункт, который является значением в диапазоне от 0x0000 до 0x10FFFF. Наиболее часто используемые символы имеют значения кодовых точек, которые будут помещаться в 16-разрядное слово в памяти и на диске, но символы с значениями кодовых точек больше, чем 0xFFFF требуют двух последовательных 16-разрядных слов. Эти символы называются дополнительными символами, а два последовательных 16-разрядных слова называются суррогатными парами.
Если используются дополнительные символы:
Дополнительные символы могут применяться в операциях сортировки и сравнения только в параметрах сортировки с версией 90 или выше.
Все параметры сортировки уровня _100 поддерживают лингвистическую сортировку с дополнительными символами.
Дополнительные символы не поддерживаются для использования в метаданных, например в именах объектов базы данных.
Впервые представленное в SQL Server 2012, новое семейство дополнительных сортировок символов (SC) можно использовать с типами данных
nchar,nvarcharиsql_variant. Например,Latin1_General_100_CI_AS_SCили при использовании японского параметра сортировкиJapanese_Bushu_Kakusu_100_CI_AS_SC.Флаг SC может применяться к следующим параметрам сортировки:
Коллации Windows версии 90
Параметры сортировки Windows версии 100
Флаг SC нельзя применить к:
Параметры сортировки Windows версии 80 и ниже
Параметры двоичной сортировки BIN и BIN2
Параметры сортировки SQL*
В следующей таблице сравнивается поведение некоторых строковых функций и строковых операторов при использовании дополнительных символов в случае с учётом SC-сортировки и без неё.
| Строковая функция или оператор | С использованием SC сортировки | Без сортировки SC |
|---|---|---|
|
CHARINDEX LEN PATINDEX |
Суррогатная пара UTF-16 считается одной кодовой точкой. | Суррогатная пара UTF-16 считается двумя кодовыми точками. |
|
ЛЕВО ЗАМЕНЯТЬ ОБРАТНЫЙ ПРАВО ПОДСТРОКА Вещи |
Эти функции обрабатывают каждую суррогатную пару как единую кодовую точку и работают должным образом. | Эти функции могут разделить любые суррогатные пары и привести к непредвиденным результатам. |
| NCHAR | Возвращает символ, соответствующий указанному значению кодовой точки Юникода в диапазоне от 0 до 0x10FFFF. Если указанное значение находится в диапазоне от 0 до 0xFFFF, возвращается один символ. Для больших значений возвращается соответствующая суррогатная пара. | Значение, превышающее 0xFFFF, возвращает значение NULL вместо соответствующего суррогата. |
| ЮНИКОД | Возвращает точку кода UTF-16 в диапазоне от 0 до 0x10FFFF. | Возвращает кодовую точку UCS-2 в диапазоне от 0 до 0xFFFF. |
|
Шаблон — совпадение одного символа Шаблон — несовпадающие символы |
Дополнительные символы поддерживаются для всех операций с символами-шаблонами. | Дополнительные символы не поддерживаются для этих операций с подстановочными знаками. Поддерживаются другие операторы символов-шаблонов. |
поддержка GB18030
GB18030 является отдельным стандартом, используемым в Народной Республике Китая для кодирования китайских символов. В кодировке GB18030 введенные данные могут иметь длину 1, 2 или 4 байт. SQL Server обеспечивает поддержку символов, закодированных в GB18030, распознав их при входе на сервер из клиентского приложения и преобразовав и сохраняя их в собственном коде как символы Юникода. После того как они хранятся на сервере, они обрабатываются как символы Юникода в любых последующих операциях. Можно использовать любые параметры сортировки для китайского языка. Желательно использовать последнюю версию (100). Все коллации уровня _100 поддерживают лингвистическую сортировку с символами GB18030. Если данные содержат дополнительные символы (суррогатные пары), можно использовать параметры сортировки SC, доступные в SQL Server 2019 (15.x), чтобы улучшить поиск и сортировку.
Поддержка сложных скриптов
SQL Server может поддерживать входные данные, хранение, изменение и отображение сложных скриптов. К сложным скриптам относятся следующие:
Скрипты с языками с различным направлением письма, например сочетание английского и арабского текстов.
Скрипты, в которых форма символов изменяется в зависимости от их положения или где сочетаются разные символы (например, в арабском, хинди, тайском).
Языки, такие как тайский, требуют использования внутренних словарей для распознавания слов, так как между словами нет пробелов.
Приложения базы данных, взаимодействующие с SQL Server, должны использовать элементы управления, поддерживающие сложные скрипты. Стандартные элементы управления форм Windows, созданные в управляемом коде, поддерживают сложные скрипты.
Связанные задачи
| Задача | Тема |
|---|---|
| Описание задания или изменения параметров сортировки экземпляра SQL Server. | Задание или изменение параметров сортировки сервера |
| Описание задания или изменения параметров сортировки пользовательской базы данных. | Установка и изменение параметров сортировки базы данных |
| Описывает, как задать или изменить параметры сортировки столбца в базе данных. | Задание или изменение параметров сортировки столбца |
| Описывает, как возвращать сведения о сортировке на уровне сервера, базы данных или столбца. | Просмотр сведений о параметрах сортировки |
| Описывает, как писать операторы Transact-SQL, которые делают их более переносимыми между языками или облегчают поддержку нескольких языков. | Написание инструкций Transact-SQL, адаптированных к международному использованию |
| Описывает, как изменить язык сообщений об ошибках и настроек для использования и отображения данных даты, времени и валюты. | Задание языка сеанса |
Связанные материалы
Рекомендованные изменения параметров сортировки SQL Server
"Миграция рекомендаций SQL Server в Юникод"
См. также
Сортировки содержащей базы данных
Выбор языка при создании полнотекстового индекса
sys.fn_helpcollations (Transact-SQL)