powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Varchar2 реально занимаемое место на диске
18 сообщений из 18, страница 1 из 1
Varchar2 реально занимаемое место на диске
    #40030407
glorsh66
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько поле Varchar2 реально занимает место на диске?

https://stackoverflow.com/questions/20417845/what-is-the-major-difference-between-varchar2-and-char

Правильно ли я понимаю что Varchar2(4000) - это максимальное допустимое колличество символов.
И если я буду записывать строки с только одним символов то занимать они будут условно один байт?
Или даже строка с одинм символом - будет занимать 4000 байт?


Т.е. если у меня есть сеществующая таблица с Varchar2(255), я меняю на Varchar2(4000)
Смениться ли у меня реально используемое место на диске?


Как дело обстоит в постресе?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030414
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66
Как дело обстоит в постресе?
Ты там, где нужно?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030416
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66
Правильно ли я понимаю что Varchar2(4000)
RTFM Concepts: Tables and Table Clusters: Oracle Data Types
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030425
glorsh66
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
For each row, Oracle Database stores each value in the column as a variable-length field unless a value exceeds the maximum length, in which case the database returns an error. For example, in a single-byte character set, if you enter 10 characters for the last_name column value in a row, then the column in the row piece stores only 10 characters (10 bytes), not 25. Using VARCHAR2 reduces space consumption.

т.е. физически сколько написанно букв столько и занимает?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030438
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66
физически сколько написанно букв столько и занимает?

Нет конечно.
- не следует путать символы с байтами, размер байтовой последовательности зависит от кодировки БД и типа данных (Nvarchar2 всегда мультибайт).
- хранение осуществляется в виде, похожем на строку pascal, т.е. строка содержит префикс - размер.
- хранение null (равно как пустой строки) потребует 1 байт, если поле не последнее в физическом ордере.
- на физический размер таблицы повлияют еще 100500 факторов, начиная с размера блока (расходы на служебные структуры + pctfree) и до hwm.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030442
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66
For each row, Oracle Database stores each value in the column as a variable-length field unless a value exceeds the maximum length, in which case the database returns an error. For example, in a single-byte character set, if you enter 10 characters for the last_name column value in a row, then the column in the row piece stores only 10 characters (10 bytes), not 25. Using VARCHAR2 reduces space consumption.

т.е. физически сколько написанно букв столько и занимает?


да. плюс небольшой заголовок поля, где указан размер строки в байтах. иногда даже заголовка нет.

количество байтов зависит от кодировки. буква может несколько байт занимать.

это и чисел касается тоже. сколько значащих десятичных цифр в числе, столько и будет выделено места под хранение. +- особенности кодирования чисел в БД - байты знака и порядка числа.

тип CHAR дополняет значение пробелами до фиксированного размера. date тоже фиксированного размера, даже если время 00:00:00.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030497
glorsh66
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но VARCHAR2 пробелами ничего не дополняет?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030498
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66
Но VARCHAR2 пробелами ничего не дополняет?
Ты документацию не понимаешь?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030528
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если настолько нет доверия документации - есть функция dump.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030546
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256,

Описана в документации?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030687
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
Если настолько нет доверия документации - есть функция dump.


DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030689
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glorsh66


Т.е. если у меня есть сеществующая таблица с Varchar2(255), я меняю на Varchar2(4000)
Смениться ли у меня реально используемое место на диске?


Нет. Существующие данные не изменятся.

Такой подход позволяет расширять типы колонок в огромных таблицах мгновенно. Либо СУБД отклоняет DDL запрос ALTER TABLE MODIFY и придётся делать более сложную миграцию.

И новые данные не будут занимать места больше чем нужно для хранения. Если строка помещалась в varchar2(255) то и в varchar2(4000) она займёт столько же места. Т.е. 255 или 4000 это скорее ограничение целостности, чем параметр физического хранения данных. СУБД просто проверяет, что длинна строки не превышает установленный предел.

С другой стороны потребитель данных должен выделять достаточно места в буфере, чтобы сохранять любые извлекаемые данные, или выделять память на лету. Так, если генератор отчёта увидит в таблице вместо колонки с типом varchar2(255), тип varchar2(4000) он скорее всего выделит в буфере почти в 4 раза больше памяти чтобы гарантированно принять любые строки, которые могут быть в таблице.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030692
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
Т.е., по-твоему, DUMP показывает структуру содержимого "стека"? И какая от этого польза?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030710
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
mcureenab
DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.
Т.е., по-твоему, DUMP показывает структуру содержимого "стека"? И какая от этого польза?


по теме - никакой. она даже размер заголовка поля в записи не показывает.
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030738
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab

DUMP про диск ничего не знает. Это внутреннее представление значения аргумента функции, которое, в момент вызова, очевидно, находится не на диске, а в стеке.

Можно пример, когда данные на диске отличаются от "внутреннего представления значения аргумента функции"?
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40030774
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256,

имхо
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> ed
Wrote file afiedt.buf

  1* select dump('abc') d from dual
SQL> /

D
----------------------
Typ=96 Len=3: 97,98,99



на диске может быть в обратном порядке cba

.....
stax
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40031032
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не может
...
Рейтинг: 0 / 0
Varchar2 реально занимаемое место на диске
    #40031040
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Не может


REVERSE индекс может.

а ещё сжатие есть...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Varchar2 реально занимаемое место на диске
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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