Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / БД / Базы данных Учебник Окончательный вариант!!!.doc
Скачиваний:
209
Добавлен:
22.05.2015
Размер:
1.77 Mб
Скачать

4.3.1.6.Символьные типы

Символьные типы

Имя

Описание

character varying(n), varchar(n)

переменной длины с ограничением

character(n), char(n)

фиксированной длины с заполнением пробелами

text

переменная неограниченной длины

Таблица показывает наиболее часто используемые символьные типы, доступные в PostgreSQL.

Стандарт SQL определяет два первичных символьных типа: character varying(n) и character(n), гдеnявляется положительным целым числом. Оба эти типа могут хранить строки длиной доnсимволов (не байт). Попытка сохранить строку длиннее приведёт к ошибке, если только избыточные символы не являются пробелами, в этом случае строка будет усечена до максимальной длины. Если сохраняемая строка короче, чем заданная длина, то значение типа character будет дополнено пробелами, а значение типа character varying будет сохранено просто как более короткая строка.

Если осуществляется явное приведение значения типа character varying(n) или character(n), то значения с большей длиной будут усечены доnсимволов без возникновения ошибки.

Нотации varchar(n) и char(n) являются псевдонимами соответственно для character varying(n) и character(n). Указание character без длины эквивалентно character(1). Если character varying используется без указания длины, то допускаются строки любой длины. Это является расширением PostgreSQL.

В дополнение, PostgreSQL предоставляет тип text, который хранит строки любой длины. Хотя тип text отсутствует в стандарте SQL, некоторые другие SQL СУБД также поддерживают его.

Значения типа character физически дополняются пробелами до заданной длины nи хранятся и отображаются в этом виде. Однако, эти дополнительные пробелы считаются семантически неважными. При сравнении двух значений типа character конечные пробелы игнорируются и они будут удалены при преобразовании значений типа character в любые другие строковые типы. Заметим, что конечные пробелыявляютсясемантически значимыми в значениях character varying и text.

Для хранения короткой строки (до 126 байт) необходим 1 байт плюс сама строка, которая включает в случае типа character заполняющие пробелы. Более длинным строкам необходимо дополнительно 4 байта вместо 1. Длинные строки автоматически сжимаются системой, так что физически места на диске может потребоваться меньше. Очень длинные значения также хранятся в фоновых таблицах, и таким образом они не влияют на высокоскоростной доступ к коротким значениям в колоноках. В любом случае, наибольшая по длине строка, которая может быть сохранена, будет около 1Гбайта.

Tip: С точки зрения производительности, разницы при работе СУБД с этими тремя типами нет, кроме увеличения размера хранения, при использовании типа с заполнением пробелами и несколькими дополнительными циклами процессора для проверки длины, когда происходит сохранение колонки ограниченной длины. Хотя в некоторых СУБД работа с типом character(n) более производительна, но в PostgreSQL этого нет; фактически character(n) обычно самый медленный из трёх, из-за дополнительных затрат на его хранение. В большинстве случаев вместо этого типа можно использовать типы text или character varying. instead.

В PostgreSQL существует два других символьных типа с фиксированной длиной, о которых можно прочесть в следующей таблице. Тип name существуеттолькодля хранения идентификаторов во внутренних системных каталогах и не задумывался для использования обычными пользователями. Его длина в настоящий момент определена в 64 байта (63 обычных символа плюс символ окончания строки), но фактически указывается с помощью использования константы NAMEDATALEN в исходных текстах на C. Эта длина устанавливается в момент компиляции (и таким образом может меняться в специальных случаях); данное значение максимальной длины по умолчанию может быть изменено в будущих версиях. Тип "char" (обратите внимание на кавычки) отличается от char(1) тем, что для хранения его значений используется только один байт. Это тип для внутреннего использования в системных каталогах в качестве упрощённого типа перечисления.

Специальные символьные типы

Имя

Размер хранения

Описание

"char"

1 байт

однобайтный внутренний тип

name

64 байта

внутренний тип для имён объектов

Соседние файлы в папке БД