Тип данных Mysql, если ожидаемое количество символов в столбце составляет около 150 КБ - PullRequest
1 голос
/ 30 мая 2019

Я читал, что в MySql varchar допускает (переменный) максимальный размер 65 КБ.Текстовый тип данных фиксированный максимальный размер составляет 65 КБ.Это означает, что если столбец объявлен с типом Text, а поле имеет только один символ, он все равно будет занимать 65 КБ, а аналогично, когда загрузка в память занимает 65 КБ.Это правильно?

Кроме того, то же самое для среднего текста (занимающего 16 МБ, даже если этот столбец имеет только один символ)?

Допустим, мне нужно объявить столбец, который будет занят строками с количеством символов в диапазоне 150 КБ, я не могу использовать текст и могу использовать средний текст, но мне интересно, буду ли я тратить много дискового пространства/объем памяти.Какой лучший способ сделать это.Один из способов, который я могу придумать, - это создать 3 строки (разделить 150k символов на 3 строки по 50K), но есть лучший способ сделать это

1 Ответ

1 голос
/ 30 мая 2019

Нет, типы данных переменной длины, такие как VARCHAR и TEXT и их двоюродные братья, не занимают столько места, сколько их максимальный размер.Они занимают только длину строки, которую они хранят, и это может варьироваться строка за строкой, поскольку вы храните строки различной длины.

У них также есть от 1 до 4 байтов в строке для кодирования длины.Например, VARCHAR (255) хранится с 1 предшествующим байтом, потому что 1 байт может кодировать любую длину до 255. Принимая во внимание, что LONGTEXT требует 4 байта для кодирования длины, потому что это то, что требуется для максимальной длины 4GB LONGTEXT.После байтов, кодирующих длину, фактическое содержимое данных должно быть только длиной соответствующей строки.

Это немного сложнее, поскольку InnoDB сохраняет все данные на страницах одинакового размера (по умолчанию 16 КБ)), поэтому длинные строки должны быть разбиты на несколько страниц.

Для столбца, в котором ожидаемые типичные данные будут состоять из 150 тыс. символов, следует использовать MEDIUMTEXT.Типы VARCHAR и TEXT не могут хранить 150K символов.

Качество переменной длины не применяется к типу CHAR, который всегда хранит полную длину в соответствии с определением столбца.Я использую CHAR только для строк, которые имеют фиксированный размер в каждой строке, поэтому нет места впустую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...