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 можно также указать атрибуты для сортировки. Ниже в таблице
приведён список доступных атрибутов. Не все атрибуты применимы ко всем сортировкам. Если атрибут
не применим к сортировке, но указан при её создании, то это не вызовет ошибки.
Имена атрибутов чувствительны к регистру.
Имя |
Значение |
Валидность |
Описание |
|---|---|---|---|
DISABLE-COMPRESSIONS |
0, 1 |
1 bpc |
Отключение сжатия. Сжатия заставляют определённые символьные последовательности быть
сортированными как атомарные модули, например, испанские |
DISABLE-EXPANSIONS |
0, 1 |
1 bpc |
Отключение расширений. Расширения позволяют рассматривать определённые символы (например, лигатуры или гласные умляуты) как последовательности символов и соответственно сортировать. |
ICU-VERSION |
default или M.N |
UNI |
Задаёт версию библиотеки |
LOCALE |
xx_YY |
UNI |
Задаёт параметры сортировки языкового стандарта. Требуется полная версия библиотеки |
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.