2016-03-02 2 views
2

Насколько я могу судить, VARCHAR(255) делает все TINYTEXT может сделать. VARCHAR имеет тот же размер памяти, что и входит в стандарт ISO, он допускает значения по умолчанию, отличные от нуля. Я не вижу причин когда-либо использовать TINYTEXT. Но он существует, поэтому, возможно, есть причина.Есть ли причина когда-либо использовать TINYTEXT?

Есть ли в случае, если TINYTEXT будет любимый тип данных для размер, скорость и другие соображения?

+0

дубликат: http://stackoverflow.com/questions/2288628/whats-the-difference-between-varchar255-and-tinytext-string-types-in-mysql ? – Varon

+1

@ Varon Я не согласен. Ни один из ответов на этот вопрос не дает окончательного да или нет в отношении того, есть ли когда-либо хорошая ситуация для использования TINYTEXT. – rgvassar

ответ

4

Единственная ситуация, я могу думать о том, где TINYTEXT может быть полезно, если у вас есть действительно большие ряды. Содержимое столбцов VARCHAR подсчитывается против максимального размера строки 65 535 байт, но TEXT и BLOB данных нет; Столбец TINYTEXT добавляет только 1 байт к размеру строки.

На самом деле, для таблиц InnoDB ситуация несколько сложнее. Хранение Ьшо описано на следующих страницах:

https://dev.mysql.com/doc/refman/5.7/en/innodb-physical-record.html https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format-dynamic.html https://dev.mysql.com/doc/refman/5.7/en/innodb-compression-internals.html

Чтобы подвести итог, данные, хранящиеся в части таблицы с учетом вышеуказанного предела для TINYTEXT состоит из поля длины 1-байтовой и 20-байтовый указатель на внешние данные, поэтому TINYTEXT добавляет 21 байт к длине строки. Однако, когда внешнее значение меньше 40 байт, данные сохраняются в строке в строке. Таким образом, для TINYTEXT менее 40 байт хранилище аналогично VARCHAR(255), и все они подсчитываются от предела длины строки.

+0

У вас есть ссылка на максимальный размер строки и зависит ли она от конкретного компьютера? –

+0

http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html.Максимальное значение для любого двигателя составляет 65 535, но некоторые двигатели могут иметь меньшие пределы. – Barmar

+0

В InnoDB требуется 20 байт на столбец, чтобы указать на хранилище вне записи для больших 'VARCHARs' и' TEXT'. –

2

TINYTEXT по существу бесполезно. Вероятно, он существует для согласованности (4 размера TEXT и BLOB). TINYTEXT существует в MySQL задолго до того, как VARCHAR может иметь более 255 символов и до символа может быть более одного байта.

TINYTEXT действительно имеет недостатки по сравнению с VARCHAR. Для комплекса SELECT может потребоваться создать таблицу tmp (например, для ORDER BY); первым преимуществом является использование MEMORY. Резервный менее эффективен MyISAM. Любой размер TEXT и BLOB силы идут прямо к MyISAM.

разница является то, что число в VARCHAR является символов; размеры TEXT измеряются в байт. A utf8 знак может занимать до 3 байт.

Итог: Не использовать TINYTEXT. (Или TINYBLOB, который может быть заменен VARBINARY(...).)

Смежные вопросы