Параметры сортировки и международная терминология
В параметрах сортировки SQL Server приводятся свойства, управляющие правилами сортировки, учета регистра и диакритических знаков в данных. Параметры сортировки, используемые с символьными типами данных, такими как char или varchar, указывают кодовую страницу и соответствующие символы, которые могут быть представлены для данного типа данных. Неважно, устанавливается ли новый экземпляр SQL Server, восстанавливается база данных из копии или сервер соединяется с клиентскими базами данных; важно понимать требования языкового стандарта, знать порядок сортировки и необходимость учета регистра или диакритических знаков в данных, с которыми предстоит работать.
При выборе параметров сортировки для сервера, базы данных, столбца или выражения данным присваиваются определенные характеристики, которые будут влиять на многие операции в базе данных. Например, если строится запрос с предложением ORDER BY, порядок сортировки результирующего набора может зависеть от параметров сортировки, которые применяются к базе данных, или предложения COLLATE на уровне выражения запроса.
Параметры сортировки могут включать все или некоторые следующие характеристики:
учет регистра букв;
учет диакритических знаков;
учет типа японской азбуки;
учет ширины символов.
Для эффективного использования поддержки параметров сортировки в SQL Server необходимо понимать термины этого раздела и их связь с характеристиками данных.
Термины
Параметры сортировки
Языковой стандарт
Юникод
Кодовая страница
Типы данных
Порядок сортировки
Параметры сортировки
Параметры сортировки задают битовые шаблоны, представляющие в наборе данных каждый символ. Кроме того, параметры сортировки определяют правила сортировки и сравнения данных. SQL Server поддерживает хранение объектов с различными параметрами сортировки в одной базе данных. Для столбцов в кодировке, отличной от Юникода, настройка параметров сортировки определяет кодовую страницу данных и соответствующую возможность представления символов. Данные, которые перемещаются между столбцами в форматах, отличных от Юникода, необходимо преобразовывать из исходной кодовой страницы в целевую.
Результат выполнения инструкции Transact-SQL может различаться в зависимости от контекста различных баз данных, которые имеют свои параметры сортировки. По возможности используйте стандартные параметры сортировки для всей организации. Тем самым не придется явно указывать параметры сортировки для каждого символа или выражения Юникода. Если необходимо работать с объектами, имеющими различные параметры сортировки и кодовые страницы, создание запросов должно производиться с учетом очередности параметров сортировки. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).
Характеристики параметров сортировки учитывают язык, регистр, диакритические знаки, тип японской азбуки, а также ширину символов.
В параметры сортировки SQL Server входят следующие группы параметров сортировки.
Параметры сортировки Windows
Параметры сортировки Windows определяют правила хранения символьных данных на основе соответствующего языка системы Windows. Для сортировки Windows сравнение данных в формате, отличном от Юникода, реализовано с помощью такого же алгоритма, как и для данных в Юникоде. Базовые правила сортировки Windows задают алфавит или язык, используемый при сортировке по словарю, а также кодовую страницу, используемую для хранения символьных данных не в Юникоде. Сортировка в Юникоде и в других форматах совместима со строковым сравнением в соответствующей версии Windows. Тем самым обеспечивается согласованность обработки различных типов данных в SQL Server, а разработчики получают возможность сортировать строки в приложениях по тем же правилам, что и в SQL Server. Дополнительные сведения см. в разделе Настройка параметров сортировки в программе установки.Двоичные параметры сортировки
При использовании двоичной сортировки данные сортируются на основе последовательности закодированных значений, определяемых языковым стандартом и типом данных. Регистр при этом учитывается. Параметры двоичной сортировки в SQL Server определяют языковой стандарт и кодовую страницу, которые будут использованы. При этом принудительно реализуется двоичный порядок сортировки. По причине своей относительной простоты параметры двоичной сортировки помогают повысить производительность приложений. Для типов данных не в Юникоде сравнение данных производится на основе кодовых точек, определенных кодовой страницей ANSI. Типы данных в Юникоде сравниваются на основе элементов кода Юникода. Для двоичных параметров сортировки на основе типов данных Юникода при сортировке данных языковой стандарт не учитывается. Например, параметры сортировки Latin_1_General_BIN и Japanese_BIN дают одинаковые результаты сортировки, если используются с данными в Юникоде.Параметры двоичной сортировки в предыдущих версиях SQL Server сравнивали первые символы как тип данных WCHAR, а затем следовало побитовое сравнение. В целях обратной совместимости семантика существующих двоичных параметров сортировки изменена не будет.
Двоичная сортировка в этой версии SQL Server включает набор параметров сортировки со сравнением исключительно кодовых точек. Чтобы воспользоваться преимуществами настоящего сравнения кодовых точек, можно перейти на двоичную сортировку. При разработке новых приложений рекомендуется использовать параметры двоичной сортировки. Суффиксом BIN2 определяются имена наборов параметров сортировки, реализующих новую семантику параметров сортировки кодовых точек. Существует флаг сравнения, соответствующий BIN2 для новой двоичной сортировки. Дополнительные сведения см. в разделе Рекомендации по использованию параметров сортировки BIN и BIN2.
SQL Server
Параметры сортировки SQL Server (SQL_*) имеют обратную совместимость с более ранними версиями SQL Server, с точки зрения порядка сортировки. Правила сортировки словаря для данных в формате, отличном от Юникода, не совместимы ни с какими процедурами сортировки операционных систем Windows. Однако сортировка данных в Юникоде совместима с правилами сортировки определенной версии Windows. Поскольку параметры сортировки SQL Server применяют для данных в Юникоде и в отличных от него форматах разные правила сортировки, при сравнении одних и тех же данных получатся разные результаты, которые будут зависеть от базового типа данных. Дополнительные сведения см. в разделе Использование параметров сортировки SQL Server.Примечание При обновлении англоязычной версии экземпляра SQL Server можно задать параметры сортировки SQL Server (SQL_*), чтобы обеспечить совместимость с существующими экземплярами SQL Server. Поскольку для экземпляра SQL Server параметры сортировки по умолчанию определяются во время установки, очень важно правильно настроить параметры сортировки в следующих случаях.
Код приложения зависит от поведения предыдущих параметров сортировки SQL Server.
Планируется использование репликации SQL Server с уже установленными SQL Server 6.5 или SQL Server 7.0.
Необходимо хранить символьные данные, в которых используется несколько языков.
Настройка параметров сортировки поддерживается на следующих уровнях экземпляра SQL Server.
Параметры сортировки уровня сервера
Параметры сортировки, установленные в процессе установки SQL Server, становятся также параметрами сортировки по умолчанию для системных баз данных. Обратите внимание, что параметры сортировки исключительно в Юникоде не выбираются во время установки SQL Server, поскольку они не поддерживаются как параметры сортировки на уровне сервера.После назначения параметров сортировки любому объекту, отличному от столбца или базы данных, его можно будет изменить только с помощью удаления и повторного создания объекта. Вместо изменения параметров сортировки по умолчанию для экземпляра SQL Server можно задать параметры сортировки при создании новой базы данных или столбца базы данных.
Запрос параметров сортировки сервера для экземпляра SQL Server выполняется с помощью следующей инструкции Transact-SQL, использующей функцию SERVERPROPERTY.
SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
Запрос всех доступных на сервере параметров сортировки выполняется с помощью следующей встроенной функции fn_helpcollations().
SELECT * from ::fn_helpcollations()
Параметры сортировки уровня базы данных
При создании базы данных можно задать ее параметры сортировки по умолчанию с помощью предложения COLLATE в инструкции CREATE DATABASE. Если параметры сортировки не указаны, базе данных назначаются параметры сортировки по умолчанию для базы данных model. Параметры сортировки базы данных model совпадают с параметрами сортировки по умолчанию экземпляра SQL Server.Параметры сортировки пользовательской базы данных можно изменить с помощью инструкции ALTER DATABASE следующим образом.
ALTER DATABASE myDB COLLATE Greek_CS_AI
Текущие параметры сортировки базы данных можно получить с помощью следующей инструкции.
SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
Примечание Изменение параметров сортировки на уровне базы данных не влияет на параметры сортировки на уровне столбца или выражения.
Параметры сортировки на уровне столбцов
При создании таблицы параметры сортировки для каждого столбца символьной строки можно указывать с помощью предложения COLLATE инструкции CREATE TABLE. Если параметры сортировки не указаны, то столбцу присваиваются параметры сортировки по умолчанию для базы данных.Параметры сортировки столбца можно изменить с помощью инструкции ALTER TABLE следующим образом.
ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
Параметры сортировки уровня выражений
Параметры сортировки уровня выражения задаются при выполнении инструкции, и они влияют на способ возврата результирующего набора. Это позволяет определить результаты сортировки предложения ORDER BY в соответствии с конкретным языковым стандартом. Для реализации параметров сортировки уровня выражения предложение COLLATE применяется следующим образом.SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
В начало
Языковой стандарт
Языковой стандарт представляет собой набор сведений, связанных с местом или с культурой. В него может входить имя и идентификатор языка, шрифт, применяемый для записи на нем, а также национальные стандарты. Параметры сортировки могут быть ассоциированы с одним или несколькими языковыми стандартами.
В начало
Юникод
Данные на нескольких языках следует всегда хранить в Юникоде (nchar, nvarchar и ntext), а не использовать другие типы данных (char, varchar и text).
Типы данных, отличные от Юникода, имеют значительные ограничения. Это происходит, поскольку на компьютере, где не применяется Юникод, можно использовать только одну кодовую страницу. Применение Юникода позволяет повысить производительность, поскольку требуется выполнять меньше преобразований кодовых страниц. Параметры сортировки в Юникоде следует выбирать индивидуально на уровне базы данных, столбца или выражения, поскольку они не поддерживаются на уровне сервера.
Кодовая страница, используемая клиентом, определяется установками операционной системы. Чтобы установить кодовую страницу клиента в операционных системах Windows 2000, Windows XP, Windows Server 2003 или Windows Server 2008, используйте раздел Язык и региональные стандарты на панели управления.
При переносе данных из сервера на клиент старые клиентские драйверы могут не распознать параметры сортировки сервера. Это может произойти при перемещении данных из сервера с поддержкой Юникода на клиент без поддержки Юникода. Лучшим вариантом может быть обновление операционной системы клиента, чтобы обновить параметры сортировки базовой системы. Если на клиенте установлена клиентская программа базы данных, то можно попробовать применить обновление службы к клиентской программе базы данных.
Можно также попробовать использовать другие параметры сортировки для данных на сервере. Выберите параметры сортировки, соответствующие кодовой странице на клиенте. Дополнительные сведения см. в разделе «Установка и изменение параметров сортировки» электронной документации по SQL Server.
Чтобы получить представление о трудностях, связанных с применением типов в Юникоде или не в Юникоде, протестируйте свой сценарий, измерив разницу производительности для этих двух вариантов в вашей среде. Рекомендуется стандартизировать системные параметры сортировки, которые используются в организации, а там, где это возможно, — развертывать серверы и клиенты с поддержкой Юникода. Дополнительные сведения о Юникоде см. на веб-узле Unicode Consortium.
Во многих случаях SQL Server будет взаимодействовать с другими серверами и клиентами, поэтому в организации могут использоваться несколько стандартов доступа к данным для приложений и экземпляров серверов. Клиенты SQL Server бывают двух основных типов.
Клиенты с поддержкой Юникода, применяющие OLE DB и ODBC версии 3.7 или более поздних версий.
Клиенты без поддержки Юникода, применяющие библиотеку баз данных и ODBC версий 3.6 или более ранних версий.
В следующей таблице приведены сведения по применению данных на нескольких языках с различными сочетаниями серверов, поддерживающих и не поддерживающих Юникод.
Сервер |
Клиент |
Преимущества или ограничения |
---|---|---|
Юникод |
Юникод |
Поскольку данные в Юникоде широко используются в системе, этот сценарий обеспечивает наилучшую производительность и защиту полученных данных от повреждения. Это случай применения ActiveX (ADO), OLE DB, а также ODBC версий 3.7 или более поздних версий. |
Юникод |
Не Юникод |
В этом случае при перемещении данных на клиентский компьютер возможны ограничения или ошибки, особенно если сервер под управлением новой операционной системы соединяется с клиентом старой версии SQL Server и под управлением старой операционной системы. Будет предпринята попытка преобразовать находящиеся на сервере данные в Юникоде с помощью соответствующей кодовой страницы на клиенте, кодировка которого отлична от Юникода. |
Не Юникод |
Юникод |
Это не лучшая конфигурация для работы с данными на нескольких языках. Невозможно записать данные в Юникоде на сервер, работающий не в Юникоде. Вероятнее всего, неполадки могут произойти при отправке данных на серверы, которые поддерживают другие кодовые страницы. |
Не Юникод |
Не Юникод |
В этом сценарии очень много ограничений для применения данных на нескольких языках. Можно использовать только одну кодовую страницу. |
Если при перемещении данных с сервера на клиент возникают трудности или ошибки (особенно с сервера с поддержкой Юникода на клиент, не поддерживающий Юникод), старые драйверы клиента могут не распознать параметры сортировки сервера. В этом случае лучшим вариантом может быть обновление операционной системы клиента для обновления параметров сортировки базовой системы. Если на клиенте установлена клиентская программа базы данных, то можно попробовать применить обновление службы к клиентской программе базы данных.
Можно также попробовать использовать другие параметры сортировки для данных на сервере. Выберите параметры сортировки, соответствующие кодовой странице на клиенте. Дополнительные сведения об изменении параметров сортировки см. в разделе «Установка и изменение параметров сортировки в SQL Server» электронной документации по SQL Server. Дополнительные сведения об изменении параметров сортировки см. в техническом документе «Рекомендации по изменению параметров сортировки в SQL Server». Дополнительные сведения о миграции в Юникод типов данных не в Юникоде см. в техническом документе «Рекомендации по миграции в Юникод для SQL Server».
Связанные разделы:Основы Юникода
В начало
Кодовая страница
Кодовая страница — это упорядоченный набор символов данного набора символов, в котором числовой индекс или значение элемента кода связано с каждым символом. Кодовую страницу Windows часто называют набором символов или кодировкой. Кодовые страницы обеспечивают поддержку кодировок и раскладок клавиатуры, применяемых в различных системных языковых системах Windows.
Все параметры сортировки в Юникоде Windows Server 2008 основаны на Юникоде 5.0.
В начало
Типы данных
Тип данных представляет собой определение, которое указывает диапазон значений, операции, которые могут выполняться над значениями, а также способ хранения значений в памяти. Описание типов данных позволяет SQL Server предсказуемо управлять данными. char, varchar и text относятся к типам данных с символами в формате, отличном от Юникода. Типы данных Юникод — это nchar, nvarchar и ntext. В приложениях рекомендуется использовать данные в Юникоде, особенно если данные хранятся на нескольких языках.
Дополнительные сведения о миграции в Юникод типов данных не в Юникоде см. в техническом документе «Рекомендации по миграции в Юникод для SQL Server».
Связанные разделы:Типы данных (компонент Database Engine), Типы данных (Transact-SQL), Типы данных служб Integration Services
В начало
Порядок сортировки
Порядок сортировки устанавливает способ сортировки значений данных. Это влияет на результаты сравнения данных. Данные сортируются с помощью параметров сортировки, и ее можно оптимизировать с помощью индексов.
Связанные разделы:Стили сортировки в параметрах сортировки Windows, Индексы
В начало