Шрифт:
Интервал:
Закладка:
Важно быть в курсе того, как многобайтовые наборы символов влияют на размеры текстовых элементов, особенно имеющих переменный размер. Например, в наборе символов UNICODE FSS даже 256-символьный столбец будет иметь больший размер - потенциально 770 байт- как для хранения данных, так и для поиска. Дальше в этой главе будет много сказано об осторожности, которую вы должны проявить, решая вопрос о хранении текстов для многобайтовых наборов символов.
Ограничения индексовПри решении вопросов размера, набора символов и последовательности сортировки для символьного столбца вам нужно убедиться, что индексируемые столбцы этих типов достаточно ограничены по размеру. В настоящее время (версия 1.5) общий размер любого индекса не может превышать 252 байта- заметьте, байтов, а не символов. Многобайтовые и многие более сложные однобайтовые наборы символов используют много больше байтов, чем простые наборы символов. Многосегментные индексы используют дополнительные байты, как и последовательности сортировки. Просчитайте количество байтов в процессе проектирования!
Подробности см. в главе 18, обратите внимание на разделы о наборах символов и последовательностях сортировки далее в этой главе.
Использование памяти клиентаПрограммы клиента будут выделять память для хранения копий строк, которые они считали из базы данных. Многие уровни интерфейсов выделяют достаточное количество ресурсов для максимального (т. е. определенного) размера значений столбцов фиксированной и переменной длины, даже если фактически никакие данные не сохранены в таком размере. Буферизация большого количества строк может использовать слишком большой объем памяти, и пользователи будут жаловаться на задержки при обновлении экрана и на потерю соединения.
Рассмотрим, например, какое влияние окажет на рабочую станцию запрос, возвращающий 1024 строки, каждая из которых содержит один столбец, объявленный как VARCHAR(1024) . Даже с самым "скромным" набором символов этого столбца потребуется, по меньшей мере, 1 Мбайт памяти клиента. Для столбца Unicode умножьте эту величину на три.
Символьные данные фиксированной длины
Строковые типы данных фиксированной длины в Firebird используются для хранения строк, длина которых является одной и той же или очень близкой, либо там, где фор- мат или относительная позиция символов может передавать семантическое содержание. Обычно они применяются для таких элементов, как идентификационные коды, номера удаленной связи, базирующиеся на символах цифровые системы, а также для объявления полей с целью хранения предварительно форматированных строк фиксированной длины, чтобы конвертировать их в другие типы данных - например, литералы даты Firebird.
Начальные символы пробелов (символ ASCII 32) во вводимых строках фиксированной длины являются значимыми, в то время как завершающие - нет. При сохранении строк фиксированной длины Firebird убирает конечные пробелы. Строки отыскиваются без избыточного расширения до объявленной длины.
Использование типов фиксированной длины не рекомендуется для данных, которые могут содержать значимые конечные символы пробелов, или для элементов, чья фактическая длина может сильно изменяться.
CHAR(n), алиас для CHARACTER(n)
CHAR(n), алиас для CHARACTER(n), является основой символьного типа фиксированной длины, n представляет точное количество хранимых символов. Этот тип данных может хранить строки любого поддерживаемого набора символов.
! ! !
ПРИМЕЧАНИЕ. Если аргумент длины, n, в объявлении отсутствует, то предполагается CHAR(1). Допустимо объявлять односимвольные поля CHAR как просто CHAR.
. ! .
NCHAR(n), алиас для NATIONAL CHARACTER(n)
NCHAR (n), алиас для NATIONAL CHAR(11) , является специализированной реализацией типа CHAR(n) с предварительно установленным атрибутом набора символов iso8859_1. Естественно, недопустимо определять атрибут набора символов для столбца NCHAR, хотя последовательность сортировки - последовательность, в которой будут сортироваться символы для поиска упорядочения вывода, - может быть объявлена для столбца или домена, которые используют этот тип.
Подробные разделы о наборах символов и последовательностях сортировки присутствуют далее в этой главе.
Символьные данные переменной длины
Строковые типы данных переменной длины в Firebird используются для хранения строк, длина которых может изменяться. Обязательный аргумент размера n ограничивает количество символов, которые могут храниться в столбце максимум n символами. Размер типа VARCHAR не может превышать 32 765 байтов, потому что Firebird добавляет два байта к размеру элемента для каждого объекта VARCHAR.
Выбор, хранение и поиск текстов переменной длиныСимвольный тип переменной длины используется для хранения текстов, потому что размер хранимой структуры равен фактическому размеру данных плюс два байта. Все символы, введенные в поле переменной длины, трактуются как значимые, включая начальные и конечные пробельные символы.
Транспортировка в сетиДо Firebird 1.5 найденные текстовые элементы данных переменной длины дополнялись на сервере до полного, объявленного размера до передачи клиенту. Начиная с Firebird 1.5, данные не дополняются. На момент написания этой книги такая возможность для текстов переменной длины не была выполнена для Firebird 1,0.x, что может повлиять на ваш выбор размера и типа столбца, если вы пишете приложения для удаленных клиентов, соединяющихся с сервером 1,0.x в медленной сети.
Хотя типы переменной длины могут хранить строки почти в 32 Кбайтах, на практике не рекомендуется использовать их для элементов данных, длиннее, чем 250 байт, особенно если их таблицы будут увеличиваться в размерах или если они часто будут субъектом запросов SELECT. Тип данных BLOB с подтипом SUB_TYPE 1 (текст) обычно лучше подходит для хранения больших строковых данных. Тексты BLOB подробно обсуждаются в следующей главе.
VARCHAR(n), алиас для CHARACTER VARYING(n)VARCHAR(n), алиас для CHARACTER VARYING(n), является базовым строковым типом переменной длины, n представляет максимальное количество символов, которое может сохраняться в столбце. Этот тип хранит строки любого поддерживаемого набора символов. Если никакой набор символов не указан, атрибут примет значение набора символов по умолчанию, который был определен в операторе CREATE DATABASE в предложении DEFAULT CHARACTER SET. ЕСЛИ не существует набора символов по умолчанию, то столбец получит CHARACTER SET NONE.
NCHAR VARYING(n), алиас для NATIONAL CHAR VARYING(n)NCHAR VARYING(N), алиас для NATIONAL CHAR VARYING(N), который в свою очередь является алиасом для NATIONAL.CHARACTER VARYING(N) - это специализированная реализация типа VARCHAR(n) с предварительно установленным атрибутом набора символов ISO8859_1. Недопустимо определять атрибут набора символов для столбца NCHAR VARYING, хотя последовательность сортировки - последовательность, в которой будут сортироваться символы для поиска упорядочения вывода - может быть объявлена для столбца или домена, которые используют этот тип.
Наборы символов и последовательность сортировки
Набор символов, выбранный для хранения текстовых данных, определяет:
* символы, которые могут быть использованы в столбцах CHAR, VARCHAR и BLOB SUB_TYPE | (текст);
* число байтов, выделяемых для каждого символа;
* последовательность сортировки по умолчанию (алфавитно-цифровой порядок), используемая при сортировке столбцов CHAR и VARCHAR (столбцы BLOB не могут сортироваться - так что последовательность сортировки для них не применяется).
Если для столбца вы не укажете набор символов, то для него будет использован набор символов по умолчанию базы данных. Если для базы данных не указан набор символов по умолчанию, то столбец получит значение CHARACTER SET NONE. ЕСЛИ ваша база данных используется в окружении, где присутствует только английский язык, у вас может появиться соблазн не использовать набор символов. Не соблазняйтесь! Набор символов NONE безропотно примет любые однобайтовые символы. Проблемы появятся- в неанглийском окружении или при наличии смешанных языков- вы получите ошибку транслитерации при выборе ваших текстовых данных. То, что уходит, не всегда то же самое, что приходит!
Текст, вводимый с клавиатуры или с других устройств ввода, например с устройства считывания штрихового кода, особым образом кодируется в соответствии с некоторой стандартной кодовой страницей, которая может быть связана с диалектом, заданным при установке вводящего устройства. Обычно входные устройства снабжаются программами-адаптерами, дающими возможность пользователям по желанию переключать кодовую страницу.
В одной кодовой странице числовой код, соответствующий образу некоторого символа, может отличаться от кода в другой кодовой странице. В основном каждый набор символов Firebird отображает некоторую кодовую страницу или группу связанных кодовых страниц. Некоторые наборы символов работают более чем с одной кодовой страницей, в отдельных случаях кодовая страница будет работать более чем с одним набором символов. Различные языки могут использовать один общий набор символов, но по-разному отображая пары прописные/строчные буквы, символы валюты и др.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование