FirebirdSQL logo

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

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

CREATE COLLATION

Назначение

Добавление новой сортировки (сравнения) для набора символов поддерживаемого в базе данных.

Доступно в

DSQL

Синтаксис
CREATE COLLATION collname
FOR charset
[FROM basecoll | FROM EXTERNAL ('extname')]
[NO PAD | PAD SPACE]
[CASE [IN]SENSITIVE]
[ACCENT [IN]SENSITIVE]
['<specific-attributes>'];

<specific-attributes> ::= <attribute> [; <attribute> ...]

<attribute> ::= attrname=attrvalue
Table 1. Параметры оператора CREATE COLLATION
Параметр Описание

collname

Имя сортировки (сравнения). Максимальная длина 63 символов.

charset

Набор символов.

basecoll

Базовая сортировка (сравнение).

extname

Имя сортировки из конфигурационного файла.Чувствительно к регистру.

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

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

Если предложение FROM отсутствует, то Firebird ищет в конфигурационном файле fbintl.conf подкаталога intl корневой директории сервера сортировку с именем, указанным сразу после CREATE COLLATION.Другими словами, отсутствие предложения FROM basecoll эквивалентно заданию FROM EXTERNAL ('collname').

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

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

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

docnext count = 6

Специфичные атрибуты

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

Important

Имена специфичных атрибутов чувствительны к регистру.

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

Table 1. Список доступных специфичных атрибутов COLLATION
Имя Значение Валидность Описание

DISABLE-COMPRESSIONS

0, 1

1 bpc

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

DISABLE-EXPANSIONS

0, 1

1 bpc

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

ICU-VERSION

default или M.m

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

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

Tip

Если вы хотите добавить в базу данных новый набор символов с его умалчиваемой сортировкой, то зарегистрируйте ивыполните хранимую процедуру sp_register_character_name(name, max_bytes_per_character)из подкаталога misc/intl.sql установки Firebird.Для нормальной работы с набором символов, он должен присутствовать в вашей операционной системе, и зарегистрированв файле fbintl.conf поддиректории intl.

Кто может создать сортировку?

Выполнить оператор CREATE COLLATION могут:

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

Примеры

Example 1. Создание сортировки с использованием имени, найденном в файле fbintl.conf (чувствительной к регистру символов).
CREATE COLLATION ISO8859_1_UNICODE FOR ISO8859_1;
Example 2. Создание сортировки с использованием специального (заданного пользователем) названия (“external” имя должно в точности соответствовать имени в файле fbintl.conf).
CREATE COLLATION LAT_UNI
FOR ISO8859_1
FROM EXTERNAL ('ISO8859_1_UNICODE');
Example 3. Создание не чувствительной к регистру символов сортировки на основе уже присутствующей в базе данных.
CREATE COLLATION ES_ES_NOPAD_CI
FOR ISO8859_1
FROM ES_ES
NO PAD
CASE INSENSITIVE;
Example 4. Создание не чувствительной к регистру символов сортировки на основе уже присутствующей в базе данных со специфичными атрибутами.
CREATE COLLATION ES_ES_CI_COMPR
FOR ISO8859_1
FROM ES_ES
CASE INSENSITIVE
'DISABLE-COMPRESSIONS=0';
Example 5. Создание не чувствительной к регистру символов сортировки по значению чисел (так называемой натуральной сортировки).
CREATE COLLATION nums_coll FOR UTF8
FROM UNICODE
CASE INSENSITIVE 'NUMERIC-SORT=1';

CREATE DOMAIN dm_nums AS varchar(20)
CHARACTER SET UTF8 COLLATE nums_coll; -- original (manufacturer) numbers

CREATE TABLE wares(id int primary key, articul dm_nums ...);
См. также:

DROP COLLATION.

DROP COLLATION

Назначение

Удаление существующей сортировки.

Доступно в

DSQL

Синтаксис
DROP COLLATION collname
Table 1. Параметры оператора DROP COLLATION
Параметр Описание

collname

Имя сортировки.

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

Tip

Если вы хотите удалить в базе данных набор символов со всеми его сортировками, то зарегистрируйте и выполнитехранимую процедуру sp_unregister_character_set(name) из подкаталога misc/intl.sql установки Firebird.

Кто может удалить сортировку?

Выполнить оператор DROP COLLATION могут:

  • Администраторы

  • Владелец сортировки;

  • Пользователи с привилегией DROP ANY COLLATION.

Примеры

Example 1. Удаление сортировки
DROP COLLATION ES_ES_NOPAD_CI;
См. также:

CREATE COLLATION.