Подтвердить что ты не робот

VARCHAR vs TEXT в MySQL

У меня есть два поля: один для хранения excerpt с максимальным размером 500 символов, а другой для хранения description с максимальным размером 10 000 символов.

Какие типы данных я должен использовать, TEXT или VARCHAR? И почему?

После MySQL 5.0.3 VARCHAR принимает ~ 65000 символов. Но это не говорит, почему я должен использовать один тип и т.д.

Я рассуждаю, что я должен использовать VARCHAR для выдержки, потому что я могу назначить ограничение размера и TEXT для поля description, когда оно больше.

4b9b3361

Ответ 1

Длинный VARCHAR хранится таким же образом, как поле TEXT/BLOB в InnoDB (которое, как я полагаю, вы используете для транзакционной, ссылочной целостности и восстановления после сбоя, правильно?) - это находится снаружи от остальной части таблицы на диске (что может потребовать считывания другого диска).

Из памяти предполагаемого BLOB, TEXT as так как длинные VARCHAR обрабатываются такими же путь от Innodb. Вот почему Innodb руководство называет его "длинными столбцами" чем BLOB.

источник

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

Если вы используете MyISAM, углубленное обсуждение темы здесь.

Ответ 2

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

@Andy правильно, что InnoDB сохраняет как VARCHAR, так и TEXT так же внутренне.

FULLTEXT индексы поддерживаются как VARCHAR, так и TEXT. До 5.6 вы должны использовать MyISAM для получения этого типа индекса. В MySQL 5.6 он, наконец, поддерживает FULLTEXT в InnoDB. Хотя вы должны тщательно его протестировать, потому что это кажется возвращать разные результаты, чем реализация в MyISAM.

Однако Sphinx Search работает быстрее и богаче, чем реализация в MySQL. См. Мой обзор в Полнотекстовый поиск Throwdown.

@Mohammed спросил:

когда VARCHAR рассматривается LONG VARCHAR? Есть ли характерный порог?

Если вы объявляете длину до 255 байт, она может кодировать длину заданной строки с использованием одного байта. Если вы объявляете длину столбца max более 255 байт, для кодирования длины он будет использовать два байта.

Вы можете объявить столбец как LONG VARCHAR, но это действительно просто псевдоним для MEDIUMTEXT.

mysql> create table test ( l long varchar);

mysql> show create table test\G

CREATE TABLE `test` (
  `l` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Ответ 3

Если ваш контент соответствует столбцу varchar, используйте varchar.

Данные Varchar хранятся в каждой строке. Текстовые данные сохраняются как капли вне таблицы.

В соответствии с этот тест, varchar примерно в три раза быстрее, чем текст.