Нет, типы данных переменной длины, такие как VARCHAR и TEXT и их двоюродные братья, не занимают столько места, сколько их максимальный размер.Они занимают только длину строки, которую они хранят, и это может варьироваться строка за строкой, поскольку вы храните строки различной длины.
У них также есть от 1 до 4 байтов в строке для кодирования длины.Например, VARCHAR (255) хранится с 1 предшествующим байтом, потому что 1 байт может кодировать любую длину до 255. Принимая во внимание, что LONGTEXT требует 4 байта для кодирования длины, потому что это то, что требуется для максимальной длины 4GB LONGTEXT.После байтов, кодирующих длину, фактическое содержимое данных должно быть только длиной соответствующей строки.
Это немного сложнее, поскольку InnoDB сохраняет все данные на страницах одинакового размера (по умолчанию 16 КБ)), поэтому длинные строки должны быть разбиты на несколько страниц.
Для столбца, в котором ожидаемые типичные данные будут состоять из 150 тыс. символов, следует использовать MEDIUMTEXT.Типы VARCHAR и TEXT не могут хранить 150K символов.
Качество переменной длины не применяется к типу CHAR, который всегда хранит полную длину в соответствии с определением столбца.Я использую CHAR только для строк, которые имеют фиксированный размер в каждой строке, поэтому нет места впустую.