23. Сортировка (COLLATION)

В SQL текстовые строки принадлежат к сортируемым объектам. Это означает, что они подчиняются своим внутренним правилам упорядочения, например, алфавитному порядку. К таким текстовым строкам можно применять операции сравнения (например, "меньше чем" или "больше чем"), при этом значения выражения должны вычисляться согласно определённой последовательности сортировки. Например, выражение 'a'<'b' означает, что 'a' предшествует 'b' в последовательности сортировки. Под выражением 'c'>'b' имеется в виду, что в последовательности сортировки 'с' определено после 'b'. Текстовые строки, включающие больше одного символа, сортируются путём последовательного сравнения символов: сначала сравниваются первые символы двух строк, затем вторые символы и так далее, до тех пор, пока не будет найдено различие между двумя строками. Такое различие управляет порядком сортировки.

Под сортировкой (COLLATION) принято понимать такой объект схемы, который определяет упорядочивающую последовательность (или последовательность сортировки).

23.1. Создание сортировки

Оператор CREATE COLLATION задает новый порядок сортировки для существующего в базе данных набора символов.

Листинг 23.1 Синтаксис оператора CREATE COLLATION

CREATE COLLATION <имя сортировки>
FOR <имя набора символов>
[FROM <базовая сортировка> | FROM EXTERNAL ('<имя внешнего файла>')]
[NO PAD | PAD SPACE]
[CASE SENSITIVE | CASE INSENSITIVE]
[ACCENT SENSITIVE | ACCENT INSENSITIVE]
['<атрибут> [; <атрибут> ...]'];

<атрибут> ::= <имя атрибута> = <значение атрибута>

Примечание

Создать новую сортировку может администратор и пользователь с привилегией CREATE COLLATION.

Пользователь, создавший сортировку, становится её владельцем.

Оператор CREATE COLLATION ничего не создаёт, а делает сортировку известной для базы данных. Сортировка уже должна присутствовать в системе, как правило в файле библиотеки, и должна быть зарегистрирована в файле fbintl.conf подкаталога intl корневой директории РЕД Базы Данных.

Необязательное предложение FROM указывает сортировку, на основе которой будет создана новая сортировка. Такая сортировка должна уже присутствовать в базе данных. Если указано ключевое слово EXTERNAL, то будет осуществлён поиск сортировки из файла intl/fbintl.conf, при этом имя внешнего файла должно в точности соответствовать имени в конфигурационном файле (чувствительно к регистру).

Если предложение FROM отсутствует, то система ищет в конфигурационном файле fbintl.conf подкаталога intl корневой директории сервера сортировку с именем, указанным сразу после CREATE COLLATION.

Если указана опция NO PAD, то в сортировке конечные пробелы при сравнении учитываются. Если указана опция PAD SPACE, то конечные пробелы при сравнении не учитываются.

Необязательное предложение CASE позволяет указать будет ли сравнение чувствительно к регистру.

Необязательное предложение ACCENT позволяет указать будет ли сравнение чувствительно к акцентированным буквам (например "е" и "ё").

В операторе CREATE COLLATION можно также указать атрибуты для сортировки. Ниже в таблице приведён список доступных атрибутов. Не все атрибуты применимы ко всем сортировкам. Если атрибут не применим к сортировке, но указан при её создании, то это не вызовет ошибки. Имена атрибутов чувствительны к регистру.

Таблица 23.1 Список доступных атрибутов COLLATION

Имя

Значение

Валидность

Описание

DISABLE-COMPRESSIONS

0, 1

1 bpc

Отключение сжатия. Сжатия заставляют определённые символьные последовательности быть сортированными как атомарные модули, например, испанские c + h как единственный символ ch.

DISABLE-EXPANSIONS

0, 1

1 bpc

Отключение расширений. Расширения позволяют рассматривать определённые символы (например, лигатуры или гласные умляуты) как последовательности символов и соответственно сортировать.

ICU-VERSION

default или M.N

UNI

Задаёт версию библиотеки ICU для использования. Допустимые значения определены в соответствующих элементах <intl_module> в файле intl/fbintl.conf. Формат: либо строка default или основной и дополнительный номер версии, как 3.0.

LOCALE

xx_YY

UNI

Задаёт параметры сортировки языкового стандарта. Требуется полная версия библиотеки ICU. Формат строки: du_NL.

MULTI-LEVEL

0, 1

1 bpc

Использование нескольких уровней сортировки.

NUMERIC-SORT

0, 1

UNI

Обрабатывает непрерывные группы десятичных цифр в строке как атомарные модули и сортирует их в числовой последовательности (известна как естественная сортировка).

SPECIALS-FIRST

0, 1

1 bpc

Сортирует специальные символы (пробелы и т.д.) до буквенно-цифровых символов.

"1 bpc" в таблице указывает на то, что атрибут действителен для сортировок наборов символов, использующих 1 байт на символ, а "UNI" — для юникодных сортировок.

Пример.

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

CREATE COLLATION ES_ES_CI_COMPR
FOR ISO8859_1
FROM ES_ES
CASE INSENSITIVE
'DISABLE-COMPRESSIONS=0';

23.2. Удаление сортировки

Оператор DROP COLLATION удаляет указанную сортировку. Сортировка должна присутствовать в базе данных, иначе будет выдана соответствующая ошибка.

Листинг 23.2 Синтаксис оператора DROP COLLATION

DROP COLLATION <имя сортировки>;

Выполнить данный оператор может только администратор, владелец сортировки и пользователь с привилегией DROP ANY COLLATION.