powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение VarChar в различных СУБД
9 сообщений из 9, страница 1 из 1
Хранение VarChar в различных СУБД
    #34024770
Kirill Nabokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Разрабатываю архитектуру программы для управления некоторым типом документов. Документы могут иметь длинные строковые свойства.
Возможно подключение разных СУБД через ODBC драйвер.

Возник вопрос как хранить строки.

Например в SQLite или MySQL указываю тип VarChar[255].
При этом для поля не резервируюются все 255 символов, а используется столько сколько занимает текст поля. С точки зрения размера базы - очень экономно.

Подскажите пожелайста как обстоят дела с резервированием текстовых полей в других СУБД:

- MS SQL
- Oracle
- PostgreSQL
- FireBird

Буду очень признателен за помощь.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34024832
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
MS SQL 2000

varchar[(n)]
Variable-length non-Unicode character data with length of n bytes. n must be a value from 1 through 8,000. Storage size is the actual length in bytes of the data entered, not n bytes. The data entered can be 0 characters in length. The SQL-92 synonyms for varchar are char varying or character varying.

nvarchar(n)

Variable-length Unicode character data of n characters. n must be a value from 1 through 4,000. Storage size, in bytes, is two times the number of characters entered. The data entered can be 0 characters in length. The SQL-92 synonyms for nvarchar are national char varying and national character varying.

text

Variable-length non-Unicode data in the code page of the server and with a maximum length of 231-1 (2,147,483,647) characters. When the server code page uses double-byte characters, the storage is still 2,147,483,647 bytes. Depending on the character string, the storage size may be less than 2,147,483,647 bytes.

ntext

Variable-length Unicode data with a maximum length of 230 - 1 (1,073,741,823) characters. Storage size, in bytes, is two times the number of characters entered. The SQL-92 synonym for ntext is national text.



Как правило - глупо экономить на спичках.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34024847
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
О, простите. Не внимательно прочитал вопрос. В МS SQL для varchar отводится столько места, сколько он занял при первом инсерте. Если в процессе изменений длина увеличивается (но до указанного в определении поля предела), то сначала это увеличение делается за счет зарезервированного на странице места, а когда места не остается - страница расщепляется.
Если фактическая длина уменшается - никаких "сжатий" страниц не делается.

Вроде так было.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34024945
bwango
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PostgreSQL:
Все строчные типы данные - char,varchar,text - внутри представлены одним типом данных. Места занимают сколько есть + 4 байта, но тип char добивается пробелами до полной длины. Максимальная длина строки - 1Гб.

Если текст не влазит на страницу (8К), то он выносится в отдельную таблицу - т.н. TOAST - которая автоматически создается параллельно основной таблице. Там данные хранятся блоками по 2К.

Текст длиной более некоторого предела PostgreSQL пытается сжать (lz-compression).

Сжатие и/или хранение вне основной страницы можно отключить для любого столбца.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34025358
Kirill Nabokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за информацию.

Еще хотелось бы узнать про FireBird и Oracle.

Заранее спасибо.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34025384
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Oracle аналогично.
Тип VARCHAR2 хранит столько символов, сколько было введено, CHAR - дополняется пробелами до указанной при объявлении длины
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34025391
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle: Соответствующий тип данных называется varchar2, сохраняется только значимая информация + длина строки.
Если строка null, то место под ее хранение не выделяется.
Если строка превышает размер блока данных, то строка разбивается на фрагменты (chunk) и хранится в нескольких блоках в виде списка.
При уменьшении длины строки освободившееся место при определенных условиях может быть использовано для хранения других строк.
В данном перле под словом "строка" в подразумевается значение типа varchar2, не путать со строкой таблицы.
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34026835
Kirill Nabokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда еще ворпос. На сколько отличается скорость выборки полей VARCHAR по сравнению с фиксированными CHAR?
...
Рейтинг: 0 / 0
Хранение VarChar в различных СУБД
    #34026859
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажу применительно к Oracle.
Нисколько. Строки таблицы размещены в блоках данных. При выборке строки весь блок целиком считывается в кэш (если его уже там нет). Если строка такая длинная, что не вмещается в блок, в этом случае приходится считывать доп. блоки, но это уже отдельная тема. В общем случае, как правило, используется тип VARCHAR2, тип CHAR, в основном, используется для хранения коротких фиксированных строк типа какого-либо признака ('Y' / 'N', 'Ж'/ 'М' и т.д.)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение VarChar в различных СУБД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]