Поддержка параметров сортировки и Юникода

В параметрах сортировки SQL Server приводятся свойства, управляющие правилами сортировки, учета регистра и диакритических знаков в данных. Параметры сортировки, используемые с символьными типами данных, такими как char и varchar, определяют кодовую страницу и соответствующие символы, которые могут использоваться для этого типа данных. Независимо от того, устанавливается ли новый экземпляр SQL Server, восстанавливается ли база данных из копии, или сервер соединяется с клиентскими базами данных, важно понимать требования в отношении локали, знать порядок сортировки и необходимость учета регистра или диакритических знаков в данных, с которыми предстоит работать. Инструкции по формированию списка доступных в экземпляре SQL Server параметров сортировки см. в разделе sys.fn_helpcollations (Transact-SQL).

При выборе параметров сортировки для сервера, базы данных, столбца или выражения, данным присваиваются определенные характеристики, которые будут влиять на многие операции в базе данных. Например, если строится запрос с предложением ORDER BY, порядок результирующего набора может зависеть от параметров сортировки, которые применяются к базе данных, или предложения COLLATE на уровне выражения запроса.

Для эффективного использования поддержки параметров сортировки в SQL Server необходимо понимать термины этого раздела и их связь с характеристиками данных.

В этом разделе

Термины, связанные с параметрами сортировки

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

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

Поддержка GB18030

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

Связанные задачи

См. также

Термины, связанные с параметрами сортировки

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

  • Локаль

  • Кодовая страница

  • Порядок сортировки

Параметры сортировки

Параметры сортировки задают битовые шаблоны, представляющие в наборе данных каждый символ. Параметры сортировки определяют правила, используемые при сортировке и сравнении данных. 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 рассматривает символы хирагана и катакана как идентичные. Пропуск этого параметра является единственным способом указания нечувствительности к типу японской азбуки.

С учетом ширины символов (_WS)

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

SQL Server поддерживает следующие наборы параметров сортировки:

  • параметры сортировки Windows
    Параметры сортировки Windows определяют правила хранения символьных данных на основе соответствующей локали системы Windows. Для сортировки Windows сравнение данных в формате, отличном от Юникода, реализовано с помощью такого же алгоритма, как и для данных в Юникоде. Базовые правила сортировки Windows задают алфавит или язык, используемый при сортировке по словарю, а также кодовую страницу, используемую для хранения символьных данных не в Юникоде. Сортировка в Юникоде и в других форматах совместима со строковым сравнением в соответствующей версии Windows. Тем самым обеспечивается согласованность обработки различных типов данных в SQL Server, а разработчики получают возможность сортировать строки в приложениях по тем же правилам, что и в SQL Server. Дополнительные сведения см. в разделе Имя параметров сортировки Windows (Transact-SQL).

  • Двоичные параметры сортировки
    При двоичных параметрах сортировки данные сортируются на основе последовательности закодированных значений, определяемых локалью и типом данных. Регистр при этом учитывается. Параметры двоичной сортировки в SQL Server определяют локаль и кодовую страницу, которые будут использованы. При этом принудительно реализуется двоичный порядок сортировки. По причине своей относительной простоты параметры двоичной сортировки помогают повысить производительность приложений. Для типов данных не в Юникоде сравнение данных производится на основе кодовых точек, определенных кодовой страницей 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), а не использовать другие типы данных (char, varchar и text).

Типы данных, отличные от Юникода, имеют значительные ограничения. Это происходит, поскольку на компьютере, где не применяется Юникод, можно использовать только одну кодовую страницу. Применение Юникода позволяет повысить производительность, поскольку требуется выполнять меньше преобразований кодовых страниц. Параметры сортировки в Юникоде следует выбирать индивидуально на уровне базы данных, столбца или выражения, поскольку они не поддерживаются на уровне сервера.

Кодовая страница, используемая клиентом, определяется параметрами операционной системы. Чтобы установить кодовую страницу клиента в операционной системе Windows, используйте раздел Язык и региональные стандарты на панели управления.

При переносе данных из сервера на клиент старые клиентские драйверы могут не распознать параметры сортировки сервера. Это может произойти при передаче данных с сервера с поддержкой Юникода на клиент без поддержки Юникода. Лучшим вариантом может быть обновление операционной системы клиента, чтобы обновить параметры сортировки базовой системы. Если на клиенте установлена клиентская программа базы данных, можно попробовать применить обновление службы к клиентской программе базы данных.

Можно также попробовать использовать другие параметры сортировки для данных на сервере. Выберите параметры сортировки, соответствующие кодовой странице на клиенте.

Чтобы воспользоваться параметрами сортировки UTF-16, доступными в SQL Server 2012, можно выбрать один из параметров сортировки с поддержкой дополнительных символов _SC (только параметры сортировки Windows) для оптимизации поиска и сортировки некоторых символов Юникода.

Чтобы получить представление о трудностях, связанных с применением типов в Юникоде или не в Юникоде, протестируйте свой сценарий, измерив разницу производительности для этих двух вариантов в вашей среде. Рекомендуется стандартизировать системные параметры сортировки, которые используются в организации, а там, где это возможно, — развертывать серверы и клиенты с поддержкой Юникода.

Во многих случаях SQL Server будет взаимодействовать с другими серверами и клиентами, поэтому в организации может использоваться несколько стандартов доступа к данным для приложений и экземпляров серверов. Клиенты SQL Server могут быть двух видов:

  • Клиенты с поддержкой Юникода, применяющие OLE DB и ODBC версии 3.7 или более поздних версий.

  • Клиенты без поддержки Юникода, применяющие библиотеку баз данных и 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 считаются двумя кодовыми точками.

LEFT

REPLACE

REVERSE

RIGHT

SUBSTRING

STUFF

Эти функции обрабатывают каждую суррогатную пару как одну кодовую точку и работают ожидаемым образом.

Эти функции могут разорвать любые суррогатные пары, что может привести к непредвиденным результатам.

NCHAR

Возвращает символ, соответствующий заданному значению кодовой точки в Юникоде в диапазоне от 0 до 0x10FFFF. Если указанное значение лежит в диапазоне от 0 до 0xFFFF, то возвращается один символ. Для больших значений возвращается соответствующая суррогатная пара.

Если значение превышает 0xFFFF, то вместо соответствующей суррогатной пары возвращается значение NULL.

UNICODE

Возвращает кодовую точку UTF-16 в диапазоне от 0 до 0x10FFFF.

Возвращает кодовую точку UCS-2 в диапазоне от 0 до 0xFFFF.

Шаблон — совпадение одного символа

Шаблон — несовпадающие символы

Дополнительные символы поддерживаются для всех операций с символами-шаблонами.

Дополнительные символы не поддерживаются для этих операций с символами-шаблонами. Поддерживаются другие операторы символов-шаблонов.

В начало

Поддержка GB18030

GB18030 — это отдельный стандарт, который применяется в Китайской Народной Республике для кодирования китайских иероглифов. В кодировке GB18030 введенные данные могут иметь длину 1, 2 или 4 байт. SQL Server предоставляет поддержку символов GB18030, распознает их при вводе из клиентского приложения, преобразуя и сохраняя в виде символов Юникода. После сохранения на сервере эти символы при выполнении всех последующих операций рассматриваются как символы Юникода. Можно использовать любые параметры сортировки для китайского языка. Желательно использовать последнюю версию (100). Все параметры сортировки уровня 100 поддерживают лингвистическую сортировку при использовании символов GB18030. Если данные содержат дополнительные символы (суррогатные пары), для оптимизации поиска и сортировки можно использовать параметры сортировки SC, доступные в SQL Server 2012.

В начало

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

SQL Server поддерживает ввод, хранение, изменение и отображение наборов сложных знаков. Ниже приведены виды сложных скриптов:

  • Скрипты с языками с различным направлением письма, например сочетание английского и арабского текстов.

  • Скрипты, в которых форма символов изменяется в зависимости от их положения или где сочетаются разные символы (например, в арабском, хинди, тайском).

  • Для таких языков как тайский требуются внутренние словари для распознавания слов, поскольку между словами нет пробелов.

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

В начало

Связанные задачи

Задача

Раздел

Описание задания или изменения параметров сортировки экземпляра SQL Server.

Задание или изменение параметров сортировки сервера

Описание задания или изменения параметров сортировки пользовательской базы данных.

Установка и изменение параметров сортировки базы данных

Описание задания или изменения параметров сортировки столбца в базе данных.

Задание или изменение параметров сортировки столбца

Описание способа возврата сведений о параметрах сортировки на уровне сервера, базы данных или столбца.

Просмотр сведений о параметрах сортировки

Описание способа написания инструкций Transact-SQL, в которых можно более просто обеспечить большую степень языковой переносимости или поддержку нескольких языков.

Написание инструкций Transact-SQL, адаптированных к международному использованию

Описание способа изменения языка сообщений об ошибках и параметров отображения времени и валюты.

Задание языка сеанса

В начало

См. также

Рекомендованные изменения параметров сортировки SQL Server

"SQL Server Best Practices Migration to Unicode" (на английском языке)

Веб-сайт консорциума Юникод

См. также

Справочник

sys.fn_helpcollations (Transact-SQL)

Основные понятия

Параметры сортировки автономной базы данных

Выбор языка при создании полнотекстового индекса