Driver86
@Driver86
Немодератор toster.ru

Как в Innodb хранятся varchar?

Как в Innodb хранятся varchar?
Насколько знаю, вместе с таблицей. Но если происходит обновление поля, на более длинный текст (например, было 'qwe', а стало 'qwerty'), куда записывается "излишек" ('rty')? Если в отличие от char дополнительное место не резервируется (нулями/пробелами), и не получится просто рядом "дописать" 'rty'. Получается, при обновлении varchar разным текстом, текст будет хранится кусками в разных частях таблицы? Ну а при частом изменении разной длинной вообще получается что-то крайне фрагментированное?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
varchar имеет фиксированную длину и под него резервируется место. Никаких трудностей.
Ответ написан
Driver86
@Driver86 Автор вопроса
Немодератор toster.ru
для varchar отводится столько места, сколько он занял при первом инсерте. Если в процессе изменений длина увеличивается (но до указанного в определении поля предела), то сначала это увеличение делается за счет зарезервированного на странице места, а когда места не остается - страница расщепляется.
Если фактическая длина уменшается - никаких "сжатий" страниц не делается.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы