Вход/Регистрация
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
вернуться

Борри Хелен

Шрифт:

SELECT

С. RDB$CHARACTER_SET_NAME,

T.RDB$TYPE_NAME

FROM RDB$TYPES T

JOIN RDB$CHARACTER_SETS С

ON C.RDB$CHARACTER_SET_ID = T.RDB$TYPE

WHERE T.RDB$FIELD_NAME = 'RDB$CHARACTER_SET_NAME'

ORDER BY 1 ;

! ! !

ПРИМЕЧАНИЕ. Для того чтобы использовать наборы символов, отличные от NONE, ASCII, OCTETS и UNICODE_FSS, необходимо иметь библиотеку fbintl в каталоге /intl корневого каталога Firebird.

. ! .

Ограничения хранения

Важно понимать, как ваш выбор набора символов влияет на хранение планируемых вами ограничений для данных. В случае столбцов CHAR и VARCHAR Firebird ограничивает максимальный объем памяти хранения любого поля в столбце значениями 32 767 и 32 765 соответственно. На самом деле требуемое фактическое количество может быть сильно ограничено.

Неиндексируемые столбцы, использующие последовательность сортировки по умолчанию, могут хранить не более (количество символов)*(количество байтов на символ) для типа данных. Например, VARCHAR(32765) с набором символов ISO_8859_1 может хранить не более 32 765 символов, тогда как при наборе символов UNICODE_FSS (который использует три байта на символ) максимальное количество 10 291 символ.

Если столбец предполагается индексировать и/или изменить предложением COLLATE, должно быть добавлено значительное количество "запасных" байтов. Даже наименее требовательный индекс - один столбец VARCHAR, использующий однобайтовый набор символов и последовательность сортировки по умолчанию - ограничен размером 252 байта для Firebird версии 1.5 и выше. Для столбцов с многобайтовыми наборами символов количество символов меньше, чем 252 / (количество байтов на символ). Многостолбцовые индексы требуют больше байтов, чем одностолбцовые, а те, которые используют последовательность сортировки не по умолчанию, требуют еще больше.

Более подробно об этих эффектах см. разд. "Последовательность сортировки и размер индекса" далее в этой главе.

! ! !

СОВЕТ. При проектировании столбцов всегда рассматривайте возможные требования с точки зрения использования набора символов, индексирования и ключа. Всегда держите "черновую" таблицу в разрабатываемой базе данных для тестирования ограничений индексов и ключей.

. ! .

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

Набор символов по умолчанию для базы данных

Если вы не указываете набор символов по умолчанию для базы данных в объявлении CREATE DATABASE, то набор символов по умолчанию устанавливается в NONE. Набор символов NONE не предполагает никакого набора символов для текстовых столбцов, сохраняя данные точно в том виде, в каком они были введены. Если клиентское соединение не указывает набора символов, то данные также будут отыскиваться точно так, как они были введены. Алфавитно-цифровое упорядочение ограничено упорядочением кодов ASCII, а преобразование верхний/нижний регистр поддерживается только в кодах U.S.ASCII 65-90 и 97-102 соответственно.

Указывайте допустимый код набора символов в предложении DEFAULT CHARACTER SET:

CREATE DATABASE '/data/adatabase.fdb'

. . .

DEFAULT CHARACTER SET WIN1251;

Более подробную информацию об операторе CREATE DATABASE см. в главе 12.

Переопределение набора символов на уровне столбца

Атрибут набора символов может быть добавлен к индивидуальному определению домена, столбца таблицы или переменной PSQL типа CHAR, VARCHAR или BLOB SUB_TYPE 1 для перекрытия набора символов по умолчанию базы данных.

Например, следующий фрагмент скрипта создает базу данных с набором символов по умолчанию ISO8859_1 и таблицу, содержащую различные версии языка похожих данных в отдельных столбцах:

CREATE DATABASE '/data/authors.fdb' DEFAULT CHARACTER SET ISO8859_1;

CREATE TABLE COUNTRY_INTL(

CNTRYCODE BIGINT NOT NULL,

NOM_FR VARCHAR(30) NOT NULL,

/* использует набор символов по умолчанию */

NOM_EN VARCHAR(30), /* использует набор символов по умолчанию */

NOM_RU VARCHAR(30) CHARACTER SET WINI251,

NOM_JP VARCHAR(30) CHARACTER SET SJIS_0208

Другой фрагмент того же скрипта создает домен для хранения данных BLOB В наборе символов кириллицы:

CREATE DOMAIN MEMO_RU AS BLOB SUB_TYPE 1

CHARACTER SET WIN1251;

Позже в этом скрипте мы создаем таблицу, которая хранит некоторый текст в кириллице:

CREATE TABLE NOTES_RU (

DOC_ID BIGINT NOT NOLL,

NOTES MEMO_RU

);

Следующий фрагмент определяет хранимую процедуру, которая преобразует входную строку в другой набор символов перед сохранением ее в таблице:

  • Читать дальше
  • 1
  • ...
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: