Плагин MySQL / InnoDB: будут ли значения NULL для полей VARCHAR по-прежнему занимать места для хранения? - PullRequest
6 голосов
/ 27 июня 2011

Я использую плагин InnoDB в формате файла Barracuda с:

ROW_FORMAT=DYNAMIC

Если я определяю поле как VARCHAR(255), а затем вставляю запись с *Значение 1007 * для этого поля, будет ли эта запись по-прежнему использовать 255 байт в памяти для поля VARCHAR?Или не будет потраченного впустую места для хранения?

В связанной заметке, если я определю поле как INT, то, вероятно, каждая запись будет по-прежнему использовать 32 бита для этого поля, даже если его значение равно NULL.Это правильно?

Спасибо

1 Ответ

6 голосов
/ 27 июня 2011

Я думаю, что это должно ответить на ваш вопрос -

Значение SQL NULL резервирует один или два байта в каталоге записей.Кроме того, значение SQL NULL резервирует ноль байтов в части данных записи, если она хранится в столбце переменной длины.В столбце фиксированной длины он резервирует фиксированную длину столбца в части данных записи.Резервирование фиксированного пространства для значений NULL позволяет выполнять обновление столбца с NULL до значения, отличного от NULL, без фрагментации страницы индекса.

Проверьте больше на тип данныхтребования к хранилищу и Физическая структура строк InnoDB

...