MySQL - Использует ли TEXT для потенциально небольших строк избыточного? - PullRequest
4 голосов
/ 03 августа 2010

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

Не зная, как MySQL хранит строковые данные, мне интересно, было бы излишне использовать больший тип данных, например TEXT, для строк, которые, вероятно, часто будут содержать менее 100 символов. Что делает MySQL с такими данными с высокой вариабельностью?

Ответы [ 2 ]

6 голосов
/ 03 августа 2010

См. Это: http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html

VARCHAR (M), VARBINARY (M) L + 1 байт, если значения столбца требуют 0 - 255 байт, L + 2 байта, если значения могут требовать более255 байтов

BLOB, TEXT L + 2 байта, где L <2 ^ 16 </p>

Таким образом, в худшем случае вы используете на 1 байт на ячейку таблицы больше при использовании TEXT.

Что касается индексации: вы можете создать нормальный индекс для столбца TEXT , но вы должны указать длину префикса - например,

CREATE INDEX part_of_name ON customer (name(10));

и, более того, TEXT.столбцы позволяют создавать и запрашивать полнотекстовые индексы при использовании механизма MyISAM.

С другой стороны, столбцы TEXT не сохраняются вместе с таблицей, поэтому теоретически производительность может стать проблемой в некоторых случаях (тест производительностичтобы узнать о вашем конкретном случае).

2 голосов
/ 03 августа 2010

В последних версиях MySQL поля VARCHAR могут быть довольно длинными - до 65 535 символов в зависимости от набора символов и других столбцов в таблице.Это очень эффективно, когда у вас есть строки различной длины.См .: http://dev.mysql.com/doc/refman/5.1/en/char.html

Если вам нужны более длинные строки, вам, вероятно, придется просто смириться и использовать TEXT.

...