×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

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

Таблица 2.5.4. Символьные типы

ИмяОписание
character varying(n), varchar(n)переменная длина с ограничением
character(n), char(n), bpchar(n)фиксированная длина, дополненная пробелами
bpcharнеограниченная переменная длина с удалением пробелов
текстнеограниченная переменная длина

Таблица 2.5.4 приведены символьные типы общего назначения, доступные в Digital Q.DataBase.

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

Кроме того, Digital Q.DataBase поддерживает текст тип, предназначенный для хранения строк произвольной длины. Хотя текст тип не входит в SQL стандарт, однако он поддерживается и в некоторых других системах управления базами данных SQL. текст является Digital Q.DataBaseсобственный строковый тип данных, в котором большинство встроенных функций обработки строк определены как принимающие или возвращающие текст не character varying. Во многих случаях character varying функционирует так же, как домен над текст.

Имя типа varchar является псевдонимом для character varying, в то время как bpchar (со спецификатором длины) и char являются псевдонимами для character. Данные varchar и char псевдонимы определены в SQL стандарте; bpchar является Digital Q.DataBase расширением.

Если указан, параметр длины n должен быть больше нуля и не может превышать 10 485 760. Если character varying (или varchar) используется без указателя длины, этот тип принимает строки любой длины. Если bpchar не имеет указателя длины, он также принимает строки любой длины, но завершающие пробелы считаются семантически незначимыми. Если character (или char) не имеет указателя, это эквивалентно character(1).

Значения типа character физически дополняются пробелами до указанной ширины nи в таком виде сохраняются и отображаются. Однако завершающие пробелы считаются семантически незначимыми и игнорируются при сравнении двух значений типа character. В правилах сортировки (кодировках), где пробельные символы значимы, такое поведение может привести к неожиданным результатам; например, SELECT 'a '::CHAR(2) collate "C" < E'a\n'::CHAR(2) возвращает истину (true), хотя C локаль может считать пробел символом, идущим после символа новой строки. Завершающие пробелы удаляются при преобразовании character значения в один из других строковых типов. Обратите внимание, что завершающие пробелы являются семантически значимыми в character varying и текст значениях, а также при сопоставлении с образцом, то есть в операторе LIKE и регулярных выражениях.

Набор символов, которые могут храниться в любом из этих типов данных, определяется кодировкой базы данных, выбираемой при её создании. Независимо от конкретной кодировки, сохранение символа с кодом ноль (иногда называемого NUL) не допускается. Дополнительная информация приведена в Раздел 3.8.3.

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

Подсказка

Между этими тремя типами нет разницы в производительности, за исключением повышенного расхода дискового пространства при использовании типа с дополнением пробелами и нескольких дополнительных циклов процессора для проверки длины при записи в столбец с ограничением по длине. Хотя character(n) имеет преимущества в производительности в некоторых других системах баз данных, в Digital Q.DataBase; фактически character(n) обычно является самым медленным из трех типов из-за дополнительных затрат на хранение данных. В большинстве ситуаций текст или character varying следует использовать вместо этого.

Обратитесь к Раздел 2.1.1.2.1 для получения информации о синтаксисе строковых литералов, а также к Глава 2.6 для получения информации о доступных операторах и функциях.

Пример 2.5.1. Использование символьных типов

CREATE TABLE test1 (a character(4));
INSERT INTO test1 VALUES ('ok');
SELECT a, char_length(a) FROM test1; -- (1)

  a   | char_length
------+-------------
 ok   |           2


CREATE TABLE test2 (b varchar(5));
INSERT INTO test2 VALUES ('ok');
INSERT INTO test2 VALUES ('good      ');
INSERT INTO test2 VALUES ('too long');
ERROR:  value too long for type character varying(5)
INSERT INTO test2 VALUES ('too long'::varchar(5)); -- явное усечение
SELECT b, char_length(b) FROM test2;

   b   | char_length
-------+-------------
 ok    |           2
 good  |           5
 too l |           5

(1)

Функция char_length рассматривается в Раздел 2.6.4.


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

Таблица 2.5.5. Специальные символьные типы

ИмяРазмерОписание
"char"1 байтвнутренний однобайтовый тип
name64 байтавнутренний тип для имен объектов

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению